这个题目,可以借鉴概率论的基础知识【有高中数学基础就行】单独由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<stdio.h>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 <stdio.h>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");}