//用的PASCAL写的不知道看不看的懂整体思路
//应该就是这个样子的语言实现就无所谓了
//程序不完整有带改善~_~!
var a,b:Integer;
k:Integer;
k2:Integer;
i,j,m:Integer;
key:boolean; //退出循环条件(成功匹配)
Count:integer; //判断程序上半段是否成功
begin
key:=False;
Count:=0;
a:=StrToInt(Edta.text);
b:=StrToInt(Edtb.Text);
k:=a*b;
k2:=2*k;
for m:=k+1 to k2 do
begin
for i:=0 to 2*b do
begin
for j:=0 to 2*a do
begin
if i*a+j*b = m then
begin
key:=true;
break;
end;
end;
if key then
break;
end;
if not key then
begin
Count:=Count+1;
showMessage(intToStr(m));
end
else
key:=False;
end;
//以上用来判断是否可无限循环 m 为两数最小公因数(这里用乘机替代了,用公因数替代M即可)
//如果上面判断无异常就说明可循环再从最小公因数开始用循环来取其最大一个不能实现的分数后挑出循环即可
if Count> 0 then
begin
key:=False;
for m:=k downto b do
begin
for i:=0 to b do
begin
for j:=0 to a do
begin
if i*a+j*b = m then
begin
key:=true;
break;
end;
end;
if key then
begin
break;
end
end;
if not key then
begin
showMessage('Your is:'+intToStr(m));
end;
key:=False;
end;
end;
end;
2. 怎样快速判断一个编程题用什麽样的算法
这个要靠积累,见的题多了,自然能很快地选择合适的算法。
还要有比较丰富的知识,比如你想求一元二次方程的根,你要知道根的计算公式。想求是不是闰年,你要了解闰年的判断规则。
其实最主要的是经验,要多练,看一些经典类型的题目,如排序,循环,数组,可以挑一些感兴趣的题目练习一下。
3. 一道编程题 求算法思路.
因为n比较小,此题最优的解法是双向搜索
做法如下(n=20):
枚举前十个数的放入集合的放法,共3^10种,以两个集合的元素差为key,两个集合的元素和为value,存入哈希表
枚举后十个数的放入集合的放法,以两个集合的元素差为key,查哈希表,这样能查到对应的前十个数的分配方法,就知道总和了
这是最优解法,复杂度为3^(n/2)
这题还有一种经典的动态规划的解法,叫“双塔问题”,复杂度为w*n,w为所有数的总和
4. python算法编程题,求代码
这道题的核心在于设计算法:
根据描述:这道题的编程思路应该是这样的:任意三个数的和除以2=剩余三个数中的任意两数的平均值=游戏机的价格。
可以这样做,把六个数放入数组中,做一个多层嵌套循环遍历所有组合,当满足上述条件时执行一个返回结果的动作,可能有不止一个答案。
5. C语言编程题
一 根据算法写gcd函数
int gcd(int m, int n)
{
long s;
if (n == 0)
s = m;
else
s = gcd(n, m % n);
return s;
}
二 main主函数调用gcd函数测试
int main() {
int n, m, t;
while (true)
{
printf("输入两个数,用空格分开:
");
scanf("%d %d", &m, &n);
t = gcd(m, n);
printf("最大公约数:%d
", t);
}
}
三 运行结果
6. java编程题算法公式
总共150响,代码如下
public static void main(String[] args) {
Map<Integer,String> bombCount = new HashMap<Integer, String>();
for (int i = 1; i <= 100; i++) {
Integer aBombTime = 1*i;
Integer bBombTime = 2*i;
Integer cBombTime = 3*i;
String tempA = bombCount.get(aBombTime);
if(tempA == null){
bombCount.put(aBombTime, "a");
}
String tempB = bombCount.get(bBombTime);
if(tempB == null){
bombCount.put(bBombTime, "a");
}
String tempC = bombCount.get(bBombTime);
if(tempC == null){
bombCount.put(cBombTime, "a");
}
}
System.out.println("All bomb count = " + bombCount.size());
}
7. c语言机试编程题答题技巧
机试一般第一题好像是改错第二题是填空
,第三题才是写一个程序的算法部分就可以了,所以第一题要答好,你要能注意编程的一些小细节,和大部分语句的编写和关键词的意义。第二题要看懂题意差不多就会了
所以要多读题,第三个就是多做题了,记住一些规律性的题目。
8. 关于算法编程题(C语言实现)
char *a; //字符串 改为 char a[20];//存放字符串的字符数组
int jie; //方程的解 改为 double jie;
dy = 0; 删去 dy=0;
两处的 for(i=1;i<=z;i++) 都改为 for(i = 0; i < z; i++)
if (a[i] == '==' ) 改为 if (a[i] == '=' )
{z=i; 改为 {dy = i;
a=0;b=0; 删去 a=0;b=0;
fun(a,1,dy,&b,&c); 改为 fun(a, 0, dy - 1, &b, &c);
fun(a,dy,z,&b,&c); 改为 fun(a, dy + 1, z - 1, &b, &c);
jie=(d-b)/(e-c); 改为 jie=((double)(d-b))/(e-c);
printf("%c = %d",zm,jie); 改为 printf("%c = %f",zm,jie);
9. c#编程题-算法
usingSystem;
usingSystem.Linq;
usingSystem.Text.RegularExpressions;
namespaceConsoleApp
{
internalclassProgram
{
privatestaticvoidMain(string[]args)
{
inta=-1;
intb=-1;
intnumber=0;
intmin=0;
intmax=1000000;
Console.WriteLine("请输入要测试的整数区间,以空格隔开:");
string[]array=Console.ReadLine().Split('');
if(array.Length!=2||!IsNumberic(array[0],outa)||!IsNumberic(array[1],outb))
{
Console.WriteLine("区间输入错误,程序退出");
return;
}
if(a>min&&a<=b&&b<max)
{
for(inti=a;i<=b;i++)
{
if(Palindrome(i))
number++;
}
}
else
{
Console.WriteLine("区间输入错误,程序退出");
}
Console.WriteLine("该区间内的回文数为{0}个",number);
Console.Read();
}
privatestaticboolPalindrome(intnumber)
{
stringstrNumer=number.ToString();
returnnewString(number.ToString().Reverse().ToArray()).Equals(strNumer);
}
privatestaticboolIsNumberic(stringmessage,outintresult)
{
varrex=newRegex(@"^d+$");
result=-1;
if(!rex.IsMatch(message))
returnfalse;
result=int.Parse(message);
returntrue;
}
}
}
10. java算法编程题
putAll(4)运行结果:
4=1+1+1+1
4=1+1+2
4=1+2+1
4=1+3
4=2+1+1
4=2+2
4=3+1
static
void
putAll(int
n)
{
for(int
i=1;i<n;i++)
{
putAllRec(n+"="+i,
n-i);
System.out.println(n+"="+i+"+"+(n-i));
}
}
static
void
putAllRec(String
prefix,
int
n)
{
for(int
i=1;i<n;i++)
{
putAllRec(prefix+"+"+i,
(n-i));
System.out.println(prefix+"+"+i+"+"+(n-i));
}
}
另外提供一个不用递归的方法,同样的输出:
static
void
putAll(int
n)
{
int[]
a
=
new
int[n];
for(int
i=0;i<n;i++)
a[i]=1;
int
w
=
n-1;
while(a[0]!=n)
{
System.out.print(n+"="+a[0]);
for(int
i=1;i<=w;i++)
System.out.print("+"+a[i]);
System.out.println();
if(a[w]==1)
{
a[w-1]++;
a[w]--;
w--;
}
else
{
a[w-1]++;
int
t
=
a[w]-1;
for(int
i=0;i<t;i++)
a[w+i]=1;
w+=(t-1);
}
}
}
再附加一个上面这个方法的“精简”版(同样输出,就是代码少点,没什么实际意义):
static
void
putAll(int
n)
{
int[]
a
=
new
int[n];
for(int
i=0;i<n;i++)
a[i]=1;
while(a[0]!=a.length)
{
System.out.print(a.length+"="+a[0]);
for(int
i=1;i<n;i++)
System.out.print("+"+a[i]);
System.out.println();
a[n-2]++;
if(a[n-1]==1)
a[(n--)-1]--;
else
for(int
i=a[(n--)-1]-1;i>0;i--)
a[(++n)-1]=1;
}
}