算法2.5.1习题
2.1水仙花数
输出100~999中的所有水仙花数。若3位数ABC满足ABC = A^3+B^3+C^3,则称其为水仙花数。
#include <iostream> using namespace std; int main(){ for(int j = 1;j<=9;j++){ for(int k = 0;k<=9;k++){ for(int l = 0;l<=9;l++){ int n = j*j*j+k*k*k+l*l*l; if(n==100*j+10*k+l) cout<<n<<endl; } } } }
2.2韩信点兵
相传韩信才智过人,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只略一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值或报告无解。已知总人数不小于10,不超过100.。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1: 41
Case 2: No answer
#include <iostream> #include <cstdio> using namespace std; int main(){ int a,b,c; int i = 0; while(cin>>a>>b>>c){ int res = 1; for(int j = 10;j<=100;j++){ if(j%3==a and j%5==b and j%7==c){ printf("Case %d: %d\n",++i,j); res = 0; break; } } if(res) printf("Case %d: No answer\n",++i); } }
2-3 倒三角形
输入正整数n<=20,输出一个n层的倒三角形。例如,n=5时输出如下
#include <iostream> using namespace std; int main(){ int n; cin>>n; int a= 2*n-1; for(int i = 0 ; i < n ;i++){ int m = i; for(int m = 0 ; m<i;m++) cout<<" "; for(int m = 0 ; m<a-2*i;m++) cout<<"#"; for(int m = 0 ; m<i;m++) cout<<" "; cout<<endl; } }
2-4 子序列的和
输入两个正整数n<m<10^6,输出,保留5位小数。输入包含多组数组,结束标记为 n = m = 0。提示:本题有陷阱
#include <iostream> #include <cstdio> using namespace std; int main(){ int n,m,s = 0; while(cin>>n>>m,n!=0 and m!=0){ double sum = 0; for(int i = n ; i <=m;i++){ sum+=(double)1/i/i; } printf("Case %d: %.5lf\n",++s,sum); } }
2-5 分数化小数
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b<=1000000,c<=100。输入包含多组数据,结束标记为a = b= c = 0.