题目: 某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资? 这一道题就是我的C语言程序百例中的第72道,我稍微看了一下,好像我写的程序好像更简单。 /*算法分析: 从四张3分和三张5分中任取一张或若干张得到的最大邮资为27,即所得邮资3——27之间,故用数组XX[28]标志邮资是否可以得到,当某一位置的邮资可以取得时则数组在这个位置的值为1,否则为0;利用二重循环可以取所有可能的邮资值。 采用C++编程,在VC++6.0中通过运行,结果是19 */ #include<iostream.h> void main() { int i,j,XX[28],count=0; for(i=0;i<28;i++) XX[i]=0; for(i=0;i<=4;i++) for(j=0;j<=3;j++) if(XX[3*i+5*j]==0)XX[3*i+5*j]=1; for(i=1;i<28;i++)//i从1开始取值是因为至少要从这些邮票中取一张 if(XX[i]==1)count++; cout<<count<<endl; } 若要输出所有可能的邮资,则扩展为: #include<iostream.h> void main() { int i,j,XX[28],count=0; for(i=0;i<28;i++) XX[i]=0; for(i=0;i<=4;i++) for(j=0;j<=3;j++) if(XX[3*i+5*j]==0)XX[3*i+5*j]=3*i+5*j; for(i=1;i<28;i++)//i从1开始取值是因为至少要从这些邮票中取一张 if(XX[i]!=0) { count++; cout<<i<<" , "; } cout<<"\nThe number is: "<<count<<endl; }

评论