问题描述
解决方案
lz可不可以贴出代码?
解决方案二:
#include
main()
{ int n=0,i=0,j=0,k=0,t=0,r=0,sum=0;
int p[10],q[10];
double weight[100];
printf("请输入砝码重量种类:n");
scanf("%dn",&n);
printf("请输入砝码重量:n");
for(i=0;i
{ scanf("%4dn",p[i]);}
printf("请输入每种砝码个数:n");
for(j=0;j
{ scanf("%4dn",q[j]);}
for(i=0;i
{ for(j=0;j
{ for(k=q[j];k>0;k--)
{ weight[t]=(q[j]-k+1)*p[i];
t++;
}
}
}
sum=t+1;
for(r=0;r<t;r++)
{
if(weight[r]=weight[r-1])
{ sum=sum-1;
}
}
printf("可以称出%d种重量n",sum);
}
题目是:对于给定的n种不同的砝码,编程计算它们可以称出多少种不同的重量。
结果输出:将n种不同砝码可称出的不同重量的种数输出。
解决方案三:
其实乍看之下,这是一个非常复杂的问题:有n个不同质量的砝码。
那么使用1个砝码的情况下,有n个可能结果;
使用2个砝码的情况下,有c(n,2)种可能的“结果”;
使用3个砝码的情况下,有c(n,3)种可能的“结果”;
。。。
使用n个砝码的情况下,有c(n,n)种可能的“结果”。
所以我们至少要考虑2^n个“结果”。
更要命的是,对每一种“结果”,砝码之间还可加加减减,变数更多。。。
所以,许久之前需要这个算法题时,我也没做出来~静等有缘之人。