你得到一个100个整数和一个整数x的数组a你需要制作一个程序来查找其中有10个整数,其总和等于x
我的方法是举例说明如何找到3个整数,其总和等于x:
for(i=0;i<100;i++)
for(j=i+1;j<100;j++)
for(k=j+1;j<100;j++)
if(a[i]+a[j]+a[k]==x) {found=1;break;}
if(found==1)
printf("+ve result\n");
else printf("-ve result\n");
问题在于,如果我们想要使用这种方法来找到10个作为sumequals x的数字,那么如果我们按照这里所写的嵌套LOOPS方法制作它会非常大,所以任何人都有关于如何实现的想法这段代码?
答案 0 :(得分:0)
问题不在于程序会非常大。实际上,它将少于二十行,大多数人会称之为&#34; tiny&#34;。
问题是执行时间。你会计算出大约20万亿不同的金额。这里有一个提示:由于你计算了20万亿的总和,你可以预期它们中的大多数会给出相同的结果。那么如何避免计算大部分时间相同的数字呢?
我将定义集合S(i,j,x)= {整数0≤k≤x的集合,其中k是整数j的最多i的总和}。如果S(10,100,x)包含数字x,则有解决方案。 S(0,j,x)是包含数字0的集合。对于i≤10且j≤100的所有其他集合都是微不足道的。
我假设你应该在不同的指数找到数字。如果这不是一项要求,那就更简单了;你只需要找到最多为i个数字的集合。