[英]Loop through an array, check if a+b+c == A but avoid rechecking c+b+a etc
我已经确定了这一点,但是考虑到它返回并检查同一件事(a + b + c和a + c + b以及其他变体,而不仅仅是a + b + c),它的效率很低。
有什么办法可以避免这种情况? 我的代码如下:
int array[8]={4,5,6,0,3,2,1,9};
int i = 0, j = 0, k = 0, nmbr = 10;
for(i=0; i<8; ++i){
for(j=0; j<8; ++j){
for(k=0; k<8; ++k){
if((array[i]+array[j]+array[k]) == nmbr)
printf("%d is found with %d + %d + %d\n", nmbr, array[i], array[j], array[k]);
}
}
}
任何帮助,将不胜感激。
从i
开始j
,从j
开始k
,或者如果解决方案中不允许重复索引,则让j
从i+1
开始,而k
从j+1
。
int array[8]={4,5,6,0,3,2,1,9};
int i = 0, j = 0, k = 0, nmbr = 10;
for(i=0; i<8; ++i){
for(j=i; j<8; ++j){
for(k=j; k<8; ++k){
if((array[i]+array[j]+array[k]) == nmbr)
printf("%d is found with %d + %d + %d\n", nmbr, array[i], array[j], array[k]);
}
}
}
更改:
for(i=0; i<8; ++i){
for(j=0; j<8; ++j){
for(k=0; k<8; ++k){
至:
for(i=0; i<8-2; ++i){
for(j=i+1; j<8-1; ++j){
for(k=j+1; k<8; ++k){
注意:这假设i
, j
, k
必须是不同的。 尽管这不是必需的,但很容易更改:
for(i=0; i<8; ++i){
for(j=i; j<8; ++j){
for(k=j; k<8; ++k){
从j = i
开始第二个循环,从k = j
第三个循环(如果总和不能等于两倍,则每个+ 1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.