循环遍历数组,检查a + b + c == A但是避免重新检查c + b + a等

时间:2015-04-25 13:23:41

标签: c arrays loops

我已经把它钉了下来,但它效率很低,因为它返回并检查相同的事情(a + b + c和a + c + b以及其他变体而不仅仅是+ 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]);
                }
        }
}

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

j开始i,从k开始j,或者如果解决方案中不允许重复索引,那么让ji+1开始来自k的{​​1}}和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]);
                }
        }
}

答案 1 :(得分:2)

变化:

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){

注意:这假设ijk需要与众不同。如果这不是一个要求,那么很容易改变:

for(i=0; i<8; ++i){
        for(j=i; j<8; ++j){
                for(k=j; k<8; ++k){

答案 2 :(得分:2)

使用j = i启动第二个循环,第三个循环使用k = j+ 1,如果你的总数不能相同,则为<?xml version="1.0"?> <project name="svn-test" basedir="." default="checkoutThis"> <property file="build.properties" /> <path id="project.classpath"> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\jsvn-0.9-dev.jar" /> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\commons-lang-2.3.jar" /> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\jakarta-regexp-1.3.jar" /> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\svnant.jar"/> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\svnClientAdapter.jar"/> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\svnkit.jar"/> <pathelement location="C:\Program Files\apache-ant\ant-1.8.2\lib\svnjavahl.jar"/> </path> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="C:\Program Files\apache-ant\ant-1.8.2\lib\svnant.jar;C:\Program Files\apache-ant\ant-1.8.2\lib\svnClientAdapter.jar;C:\Program Files\apache-ant\ant-1.8.2\lib\svnkit.jar;C:\Program Files\apache-ant\ant-1.8.2\lib\svnjavahl.jar" /> <target name="checkoutThis"> <svn username="sss" password="sss"> <checkout url="https://svn.strobilanthes.com/svn/nutanstplus/" revision="HEAD" destPath="Sample_SVN" /> </svn> </target> <target name="build" depends="checkoutThis"> <description>Main target</description> </target> </project>