【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
掉不满足条件的排列。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i, j, k, count=0; 6 for(i=1; i<=4; i++) 7 { 8 for(j=1; j<=4; j++) 9 { 10 for(k=1; k<=4; k++) 11 { 12 if(i==j || i==k || j==k) 13 continue; 14 else 15 { 16 cout<<i*100+j*10+k<<" "; 17 count++; 18 if(count%10==0) 19 cout<<endl; 20 } 21 } 22 } 23 } 24 cout<<"sum="<<count<<endl; 25 system("pause"); 26 return 1; 27 }
进一步考虑输出格式,输出的三位数不一定非得乘上各自基数相加,依次输出即可
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i, j, k, count=0; 6 for(i=1; i<=4; i++) 7 { 8 for(j=1; j<=4; j++) 9 { 10 for(k=1; k<=4; k++) 11 { 12 if(i==j || i==k || j==k) 13 continue; 14 else 15 { 16 //cout<<i*100+j*10+k<<" "; 17 cout<<i<<j<<k<<" "; 18 count++; 19 if(count%10==0) 20 cout<<endl; 21 } 22 } 23 } 24 } 25 cout<<"sum="<<count<<endl; 26 system("pause"); 27 return 1; 28 }
进一步,直接找到符合条件的输出,不符合条件的舍弃,即采用 if 来精简 if…else结构,并对换行符的判断进行简化
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i, j, k, count=0; 6 for(i=1; i<=4; i++) 7 { 8 for(j=1; j<=4; j++) 9 { 10 for(k=1; k<=4; k++) 11 { 12 //if(i==j || i==k || j==k) 13 // continue; 14 //else 15 //{ 16 // //cout<<i*100+j*10+k<<" "; 17 // cout<<i<<j<<k<<" "; 18 // count++; 19 // if(count%10==0) 20 // cout<<endl; 21 //} 22 if(i!=j && i!=k && j!=k) 23 { 24 cout<<i<<j<<k<<" "; 25 if(++count%10==0) 26 cout<<endl; 27 } 28 } 29 } 30 } 31 cout<<"sum="<<count<<endl; 32 system("pause"); 33 return 1; 34 }
==============================================================
【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i; 6 cin>>i; 7 if(i<10 && i>=0) cout<<i*1000<<endl; 8 else if(i<20 && i>=10) cout<<10000+(i-10)*750<<endl; 9 else if(i<40 && i>=20) cout<<10000+7500+(i-20)*500<<endl; 10 else if(i<60 && i>=40) cout<<10000+7500+10000+(i-40)*300<<endl; 11 else if(i<100 && i>=60) cout<<10000+7500+10000+6000+(i-60)*150<<endl; 12 else if(i>=100) cout<<10000+7500+10000+6000+6000+(i-100)*100<<endl; 13 else cout<<"error input"<<endl; 14 system("pause"); 15 return 1; 16 }
参考代码如下,可读性更高,仅考虑正确输入情况
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i, bonus1, bonus2, bonus4, bonus6, bonus10, bonus; 6 cin>>i; 7 bonus1=100000*0.1; bonus2=bonus1+100000*0.075; 8 bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; 9 bonus10=bonus6+400000*0.015; 10 if(i<=100000) bonus=i*0.1; 11 else if(i<=200000) bonus=bonus1+(i-100000)*0.075; 12 else if(i<=400000) bonus=bonus2+(i-200000)*0.05; 13 else if(i<=600000) bonus=bonus4+(i-400000)*0.03; 14 else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; 15 else bonus=bonus10+(i-1000000)*0.01; 16 cout<<bonus<<endl; 17 system("pause"); 18 return 1; 19 }
==============================================================
【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 int panduan(int i); 5 int main() 6 { 7 int i; 8 for(i=0; i<=100000;i++) 9 if(panduan(i)) 10 cout<<i<<endl; 11 system("pause"); 12 return 1; 13 } 14 int panduan(int i) 15 { 16 int flag1=0,flag2=0; 17 float r1=i+100; 18 float r2=i+268; 19 int max=(int)sqrt(r2)+1; 20 for(int j=1; j<max; j++) 21 { 22 if( fabs((float)(j*j)-r1)<0.0001) 23 flag1=1; 24 if( fabs((float)(j*j)-r2)<0.0001) 25 flag2=1; 26 } 27 //cout<<flag1<<" "<<flag2<<endl; 28 if(flag1==1 && flag2==1) 29 return 1; 30 else 31 return 0; 32 }
参考代码的代码量少且思路独特
1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 int main() 5 { 6 long int i,x,y,z; 7 for(i=1; i<22; i++) 8 { 9 x=sqrt(i+100); 10 y=sqrt(i+296); 11 //cout<<"x="<<x<<" y="<<y<<endl; 12 if(x*x==i+100 && y*y==i+268) 13 cout<<i<<endl; 14 } 15 system("pause"); 16 return 1; 17 }
时间: 2024-11-05 11:47:34