移动数据打开没有网络:用C语言解决 称重组合问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 21:32:33
问题描述:设有1克、2克、5克、10克、20克、50克的砝码各一枚,问使用这些砝码在天平上可称出多少种不同的重量?
要求:1)输出可以称出的所有重量数;
2)对每种可以称出的重量数给出如何称出的方法解释。
请给出具体的程序代码和算法解释 ,谢谢

main( )
{ int n1,n2,n3,n4,n5,n6;
int n[5000]={0},i=0,j=0,totle=0,k=0;
printf("Kecheng Shi xian guo cheng \n\n");
for(n6=1;n6>=-1;n6--)
for(n5=1;n5>=-1;n5--)
for(n4=1;n4>=-1;n4--)
for(n3=1;n3>=-1;n3--) /*1代表砝码放在右盘,0代表该砝码没有用到,-1代表砝码放在左盘*/
for(n2=1;n2>=-1;n2--)
for(n1=1;n1>=-1;n1--)
{ n[k]=1*n1+2*n2+5*n3+10*n4+20*n5+50*n6;
if(n[k]>0)
{ printf(" %d = %d*1+%d*2+%d*5+10*%d+20*%d+50*%d\n",n[k],n1,n2,n3,n4,n5,n6);
i++; /*每20种称重方法打印一屏*/
k++;
if (i>=20)
{getch();
i=0;
clrscr();
printf("zhong liang cheng zhong fang fa \n");
}

}
}
getch();
clrscr();
for(i=0;i<k;i++)
for(j=i+1;j<=k;j++) /*消除重复项*/
{ if(n[i]==n[j])
n[j]=0;
}
printf("ke yi cheng chu de zhong liang shu wei :\n\n");
for(i=0;i<=k;i++)
if(n[i]>0)
{
printf("%-5d",n[i]); /*输出称出的重量数和他们总共的个数*/
totle++ ;
}
printf("\n\ngong %d zhong \n",totle);
getch();

}

C51 + C52 + C53 + C54 + C55
5 + 20 + 20 + 5 + 1

一共是51种重量