瑞星卡卡安全论坛技术交流区系统软件 【求助】编程高手救命啊,版主帮忙啊~~救人一命胜造七级浮屠

12   1  /  2  页   跳转

【求助】编程高手救命啊,版主帮忙啊~~救人一命胜造七级浮屠

【求助】编程高手救命啊,版主帮忙啊~~救人一命胜造七级浮屠

一个整数拆分成已知的一组数的和,可以不全取到。
(我的代码生成不了要的答案,需要高手帮忙优化更正一下)


#include <stdio.h>
#include <conio.h>
#define N 6
int a[N+1]={1,57,71,87,97,99,101};
int b[N+1],results=0,mole=580;
int back[N+1]={0};
int c[N+1][20]={0};
void Comout()
{    int i,j=0,k;
    int d[N+1]={0};
    for(i=1;i<=N;i++)
    for(k=1;k<=N;k++) if( c[k]!=0){d=k;break;}
    for (k=1;k<=N;k++) if(d[k]!=back[k]){j=1;break;}
    if(j==1)
    {    for(i=1;i<=N;i++)
            if(d!=0)
            {printf("{%d,%d}",a,d);back=d;}
        results++;printf("\n");
    }

}
void Searchans(int acidnum,int line)
{    int i,k;
    if(acidnum>0)
        {
            for(i=1;i<=b[line];i++)
            {    {c[line]=1;
                mole-=a[line]*i;}
                /*k=acidnum-i*/
                if((k=acidnum-i)>=0)
                {
                    Searchans(k,line+1);
                    {c[line]=0;
                    mole+=a[line]*i;}
                    Searchans(acidnum,line+1);
                }
                else
                {    {c[line]=0;
                    mole+=a[line]*i;}
                    Searchans(acidnum,line+1);
                    break;
                }
            }
        }
    else    if( mole==0) Comout();
}

        void Find()
        {    int i;
               /*    mole-=18;*/
            for(i=1;i<=N;i++) b=mole/a;
        }

        void Finals()
        {    printf("ans is :%d\n",results);}

        void Getmole()
        {    printf("please enter the mole:");
            scanf("%d",&mole);
            /*printf("mole is %d\n",mole);*/
        }
        void Making()
        {    int i,j,k;
            for(j=0;j<=N;j++)
            for(i=b[j]+1;i<20;i++) c[j]=-1;
            for(k=0;k<=N;k++)c[k][0]=-1;
        }
void main()
{      int i,line,j;
    clrscr();
    /*Getmole();*/
    Find();
    Making();
    for(j=1;j<=N;j++) if(b[j]!=0) {line=j;break;}
    for(i=b[N];i<=b[1];i++)    Searchans(i,line);
    Finals();
}
最后编辑2005-08-01 09:14:42
分享到:
gototop
 

帮你顶!
我不太懂C,请问你想把一个整数写成多少个数的和的形式?
我想到的算法是,假如你想把43写成4个正整数和的形式,总共有四个循环,且循环套循环,
for (a=1,a<=43,a++)
for(b=1,b<=43,b++)
for(c=1,c<=43,c++)
for(d=1,d<=43,d++)
if(a+b+c+d=43)
{/*这里输出a,b,c,d四个数值,由于对相关语句格式语法不熟,就写注释了*/}
}}}}
/*不好意思,对C太生疏,所以模仿你的写法写了for和if语句,语法有不对的请见谅*/
gototop
 

谢谢你。可是问题还是存在,我郁闷啊~~稳被导师骂了。
gototop
 

我好像看懂了一小部分。。。我们用了一样的算法,不过你还声明了好几个函数,我看不懂。
gototop
 

...........................
gototop
 

请问阁下能说明一下吗?我想学...
gototop
 

嵌套循环有点太那个了,如果总共有100个,我不昏菜才怪,应该有别的算法。想ing
gototop
 

人想起来是很复杂……
但是电脑很快,人告诉电脑后,让电脑想,这便是编程的魅力……
这种嵌套没什么的。
gototop
 

我昏倒啊,解决问题是关键~~我已经没有时间了。
拜托各位~~~~~~~~~~~~~~~~~~~
gototop
 

所以我们才一直在帮你顶啊
gototop
 
12   1  /  2  页   跳转
页面顶部
Powered by Discuz!NT