码迷,mamicode.com
首页 > 其他好文 > 详细

经典算法(1~30)(一)

时间:2014-10-06 17:21:50      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   strong   sp   div   

【程序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 }

 

 

 

经典算法(1~30)(一)

标签:style   blog   color   io   os   for   strong   sp   div   

原文地址:http://www.cnblogs.com/anthozoan77/p/4008198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!