一题C的算法问题
一元钱分成1分、2分、5分的,问有多少种分法?(分钱.c)
(答案:541种.)
main()
{int i,j,sum=0;
for (i=0;i <=20;i++) /*变量i为5分钱的数量*/
for (j=0;j <=(100-5*i)/2;j++) /*变量j为2分钱的数量,其余的就为一分钱*/
sum++;
printf( "共有%d种分法. ",sum);
getch();
}
为什么在 for (j=0;j <=(100-5*i)/2;j++) /*变量j为2分钱的数量,其余的就为一分钱*/
就可以得出这样的结论呢?不是应该还加上一个for去判断 一分钱的可能吗?
[解决办法]
如果5 分 和 2 分都定下来了
1分不就肯定确定了啦。
[解决办法]
没必要判断
从2分、5分的就能确定一种情况,因为总数一定,2分、5分确定了一分肯定确定。
[解决办法]
N1 = 100-5*N5-2*N2
[解决办法]
main()
{
int i,j,k;
int counter = 0;
for(i=0; i <=100; i++)
for(j=0; j <=50; j++)
for(k=0; k <=20; k++)
if(100 == i+j*2+5*k)
counter++;
printf( "%d ",counter);
getch();
}
[解决办法]
5分钱n个,2分钱m个还用说吗? 1分钱x个不就出来了吗 虽然没求出具体的x是多少,但是由于前面n,m都是不同的,所以x也都是不同的,所以不可能出现重复的, 从这个意义上来说,1分钱的多少有前两个数n,m来决定。。
[解决办法]
题目只求分法,有不需具体的方案!
确定了2分和5分的,那1分的也就固定了!
[解决办法]
#include <stdio.h>
int main(void)
{
int number=0;
int i=0;
for(i=0;i <=20;i++)
{
number+=(100-5*i)/2+1;
}
printf( "total number is:%d\n ",number);
}
[解决办法]
for (i=0;i <=20;i++) /*变量i为5分钱的数量*/
for (j=0;j <=(100-5*i)/2;j++) /*变量j为2分钱的数量,其余的就为一分钱*/
像上面的两个for循环一样,如果循环变量用k的话,就是k <=100-5*i-2*j
但是j <=(100-5*i)/2,把j的不等式带入到k中,那么加上可for循环和不加是一样的。