【求助】救命啊,要被导师骂了,各路英雄救救小弟!
一个整数拆分成已知的一组数的和,可以不全取到。
(我的代码生成不了要的答案,需要高手帮忙优化更正一下)
#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();
}