这个题目,可以借鉴概率论的基础知识【有高中数学基础就行】
单独由1组成100,需要100个1
单独由2组成100,需要50个2,
单独由5组成100,需要20个5,
所以,我们得到,假设分别由x个1、y个2、z个5组成100,必然x<=100,y<=50,z<=20。
与此同时,由x<=100,y<=50,z<=20知,无论是x、y还是z,,只要循环到一定程度必然就结束!这也就是讲,只要用循环就能算出结果。
------------
下一步,就是怎么算的问题。
首先,由x个1、y个2、z个5组成100,则x+2y+5z=100。也就是讲,我们一旦判断做出x+2y+5z=100的判断,就可以断定这是其中的一种方法,用record记录,即:
int record=0;
if(x+2*y+5*z==100)
record++;
其次,有了x+2y+5z=100,那x,y,z怎么处理?很简单,就是将x,y,z所有可能性一个一个放进x+2y+5z来核对是否符合等于100这个条件。前面讲了用循环,代码如下:
for(x=1;x<=100;x++) //x<=100,则x的可能性有100种
for(y=1;y<=50;y++) //y<=50,则y的可能性有50种
for(z=1;z<=20;z++) //z<=20,则z的可能性有20种
if(x+2*y+5*z==100) //如果x,y,z组合构成100
record++; //每构成100一次,则record记录一次
好了,现在思路清晰,代码如下:
#include
int main()
{
int record=0;
int x,y,z;
for(x=1;x<=100;x++) //注意,x从1开始,不是0
for(y=1;y<=50;y++) //注意,y从1开始,不是0
for(z=1;z<=20;z++) //注意,z从1开始,不是0
if(x+2*y+5*z==100) //如果x,y,z组合构成100
record++; //每构成100一次
//则record记录一次
printf("1、2、5构成100,总共有%d种方法\n",record);
return 0;
}
#include "stdio.h"
#include "stdlib.h"
#include
int main()
{
int x=0,y=0,z=0,count=0;
for(x=0;x<=100;x++)
{
for(y=0;y<=50;y++)
{
for(z=0;z<=20;z++)
{
if(x+2*y+5*z==100)
{
count++;
printf(" sloving :%4d ,1 : %3d 2:%3d 5 %3d \n",count,x,y,z);
}
}
}
}
system("pause");
}