刘汝佳/算法竞赛入门经典第二章循环结构程序设计

  1. 习题2-1 位数(digit)  
  2. //输入一个不超过10^9的正整数,输出它的位数。例如12735的位数是5.  
  3. #include<iostream>  
  4. using namespace std;  
  5. int main()  
  6. {  
  7.     int n,i=0;  
  8.     cin>>n;  
  9.     for(;n>0;)  
  10.     {  
  11.         n=n/10;  
  12.         i++;  
  13.     }  
  14.     cout<<i<<endl;  
  15. //水仙花数(daffodil)  
  16. //输出100~999中所有的水仙花数。若3位数ABC满足ABC=A^2+B^2+C^2,则称其为水花数  
  17. //例如153=1^3+5^3+3^3,所以153是水仙花数  
  18. #include<iostream>  
  19. using namespace std;  
  20.   
  21. int main()  
  22. {  
  23.   
  24.     for(int i=100;i<=999;i++)  
  25.     {  
  26.         int a,b,c;  
  27.         a=i/100;  
  28.         b=i/10%10;  
  29.         c=i%10;  
  30.         if(i==(a*a*a+b*b*b+c*c*c))  
  31.             cout<<i<<endl;  
  32.     }  
  33.     return 0;  
  34. }  
  35. //习题2-3 韩信点兵  
  36. //描述 相传韩信才智过人,从不直接清点自己军队的人数,  
  37. //只要让士兵先后以三人一排、五人一排、七人一排地变换队形,  
  38. //而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,  
  39. //表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。  
  40. //已知总人数不小于10,不超过100 。  
  41.   
  42. #include<iostream>  
  43. using namespace std;  
  44.   
  45. int main()  
  46. {  
  47.     int a,b,c;  
  48.     cin>>a>>b>>c;  
  49.     for(int n=10;n<=100;n++)  
  50.     {  
  51.         if(n%3==a &&n%5==b && n%7==c)  
  52.             cout<<n<<endl;  
  53.         else cout<<"No answer"<<endl;  
  54.     }  
  55.     return 0;  
  56. }  
  57. //习题2-4 倒三角形(triangle)  
  58. //输入正整数n小于等于20,输出一个n层的倒三角形,例如n=5时输出如下:  
  59. /* ######### 
  60.     ####### 
  61.      ##### 
  62.       ### 
  63.        # 
  64. */  
  65. #include<iostream>  
  66. using namespace std;  
  67.   
  68. int main()  
  69. {  
  70.      int n;  
  71.      char a='#';  
  72.      cin>>n;  
  73.      for(int i=n;i>0;i--)//输出n层  
  74.      {  
  75.          for(int j=n;j>i;j--)//每一层前输出的空格数,第一层没有空格  
  76.              cout<<" ";  
  77.          for(int k=0;k<2*i-1;k++)//每一层输出#的个数等于2*n-1,因为从下往上#的个数是成等差数列的  
  78.              cout<<"#";  
  79.          cout<<endl;  
  80.      }  
  81.      return 0;  
  82. }   
  83. //习题2-5 统计  
  84. //输入一个正整数n,然后读取n个正整数a1,a2,...an,最后在读一个正整数m。  
  85. //统计a1,a2,....,an中有多少个整数的值小于m。  
  86. #include<iostream>  
  87. #include<vector>  
  88. using namespace std;  
  89.   
  90. int main()  
  91. {  
  92.     vector<int> ivec;  
  93.     int n,m;  
  94.     int a;  
  95.     cin>>n;  
  96.     while(n--)  
  97.     {  
  98.         cin>>a;  
  99.         ivec.push_back(a);  
  100.     }  
  101.     cin>>m;  
  102.     int count=0;  
  103.     for(vector<int>::iterator iter=ivec.begin();  
  104.         iter!=ivec.end();iter++)  
  105.     {  
  106.         if(*iter<m)  
  107.         count++;  
  108.     }  
  109.     cout<<count<<endl;  
  110.     return 0;  
  111. }  
  112. //习题2-6 调和级数(harmony)  
  113. //输入正整数n,输出H(n)=1+1/2+1/3+.....+1/n的值,保留3位小数。例如n=3时答案为1.833  
  114. #include<iostream>  
  115. #include<iomanip>  
  116. using namespace std;  
  117.   
  118. int main()  
  119. {  
  120.     double n;  
  121.     double sum=0.0;  
  122.     cin>>n;  
  123.     for(double i=1;i<=n;i++)  
  124.         sum+=1/i;  
  125.     cout<<setiosflags(ios::fixed)<<setprecision(3)  
  126.         <<sum<<endl;  
  127.     return 0;  
  128. }  
  129. //习题2-7 近似计算(approximation)  
  130. //计算∏/4=1-1/3+1/5-1/7+......,直到最后一项小于10^-6  
  131. #include<iostream>  
  132. #include<cmath>  
  133. using namespace std;  
  134.   
  135. int main()  
  136. {  
  137.     double pi=1.0;      //初始化pi为1  
  138.     for(double i=1.0;1/(2*i+1)>=1e-6;i++)//注意循环条件:每个项的分母成等差数列  
  139.                                         //分母跟项的关系就是:(2*i+1)  
  140.     {  
  141.         pi+=pow(-1,i)*(1/(2*i+1));      //注意:偶数项的时候为负:-1^i  
  142.     }  
  143.     cout<<pi*4<<endl;                   //∏/4乘以4就是pi的近似值  
  144.     return 0;  
  145. }    
  146. //习题2-8 子序列的和(subsequence)  
  147. //输入两个整数n<m<10^-6,输出1/n^2+1/(n+1)^2+....+1/m^2  
  148. //保留5位小数。例如n=2,m=4时,答案是0.42361;n=65536,m=655360时答案为0.00001.  
  149. #include<iostream>  
  150. #include<iomanip>  
  151. using namespace std;  
  152.   
  153. int main()  
  154. {  
  155.     int n,m;  
  156.     double sum=0;  
  157.     cin>>n>>m;  
  158.     for(double i=n;i<=m;i++)  
  159.         sum+=1/(i*i);  
  160.     cout<<setiosflags(ios::fixed)<<setprecision(5)<<sum<<endl;  
  161.     return 0;  
  162. }  
  163. //习题2-9 分数化小数  
  164. //输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=10^6,c<=100.  
  165. //例如:a=1,b=6,c=4时应输出0.1667  
  166. #include<iostream>  
  167. #include<iomanip>  
  168. using namespace std;  
  169.   
  170. int main()  
  171. {  
  172.     double a,b;  
  173.     int c;  
  174.     double t;  
  175.     cin>>a>>b>>c;  
  176.     t=a/b;  
  177.     cout<<setiosflags(ios::fixed)<<setprecision(c)<<t<<endl;  
  178.     return 0;  
  179. }  
  180. //习题2-10 排列(permutation)  
  181. //用1,2,3,....9组成3个三位数abc,def,ghi,每个数字恰好使用一次  
  182. //要求abc:def:ghi=1:2:3.输出所有解。​​​​​​
  183. #include<stdio.h> 
  184. void result(int num, int& result_add, int& result_mul)           //能改变其值,引用 
  185. {
  186.     int i, j, k;
  187.     i = num / 100;        //百位
  188.     j = num / 10 % 10;    //十位
  189.     k = num % 10;         //个位
  190.      
  191.     result_add += i + j + k;    //分解出来的位数相加
  192.     result_mul *= i * j * k;    //相乘
  193. }
  194.      
  195. int main()
  196. {
  197.     int i, j, k;
  198.     int result_add, result_mul;
  199.  
  200.     for(i = 123; i <=329; i++)
  201.     {
  202.         j = i * 2;
  203.         k = i * 3;
  204.  
  205.         result_add = 0;
  206.         result_mul = 1;
  207.         
  208.          result(i, result_add, result_mul);
  209.         result(j, result_add, result_mul);
  210.         result(k, result_add, result_mul);
  211.  
  212.         if(result_add == 45 && result_mul == 362880)
  213.         printf("%d %d %d\n", i, j, k);
  214.     }
  215.     return 0;
  216. }     
  217.                                                                                                        未完持续......

猜你喜欢

转载自blog.csdn.net/a22222259/article/details/87872755