紫书第二章
///7744问题----技巧 #include "iostream" #include "cstdio" using namespace std; int main() { for(int x=1;;x++) { int n=x*x; if(n<1000)continue; if(n>9999)break; int hi=n/100; int lo=n%100; if(hi/10==hi%10&&lo/10==lo%10) printf("%d\n",n); } return 0; } ///例题2-4阶乘之和---规律 #include "iostream" #include "cstdio" #include "time.h" using namespace std; int main() { const int MOD=10e6; int n; while(~scanf("%d",&n)) { if(n>40) cout<<140940313<<endl; else { int sum=0,factorial=1; for(int i=1;i<=n;i++) { factorial=i*factorial%MOD; sum+=factorial; } printf("%d\n",sum); } } return 0; } ///从40开始 答案不变 ///习题2-1水仙花数 #include "iostream" #include "cstdio" using namespace std; int main() { int a,b,c; for(int i=100;i<1000;i++) { a=i%10;b=i%100/10;c=i/100; if(a*a*a+b*b*b+c*c*c==i) printf("%d\n",i); } return 0; } ///习题2-2韩信点兵 #include "iostream" #include "cstdio" using namespace std; int main() { int a,b,c,n,t=0; while(~scanf("%d%d%d",&a,&b,&c)) { t++; int i; for(i=10;i<=100;i++) { if(i%3==a&&i%5==b&&i%7==c) { cout<<"Case "<<t<<":"<<i<<endl;break; } } if(i>100) cout<<"Case "<<t<<":"<<"No answer"<<endl; } return 0; } ///习题2-3倒三角形 #include "iostream" #include "cstdio" using namespace std; int main() { int n; while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) { for(int j=1;j<=n-i;j++) printf(" "); for(int k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } for(int i=n-1;i>=1;i--) { for(int j=1;j<=n-i;j++) printf(" "); for(int k=1;k<=2*i-1;k++) printf("*"); printf("\n"); } } return 0; } ///习题2-4子序列的和 #include "iostream" #include "cstdio" using namespace std; int main() { int n,m,t=0; while(~scanf("%d%d",&n,&m)&&n&&m) { t++; double d=0,temp; for(int i=n;i<=m;i++) { d+=1.0/i/i; } printf("Case %d: %.5f\n",t,d); } return 0; } ///题目中注意本题有陷阱:当i较大时i*i溢出,换为,1/i/i ///习题2-5分数化小数 #include "iostream" #include "cstdio" using namespace std; int main() { int a,b,c,t=0; while(~scanf("%d%d%d",&a,&b,&c)&&a&&b) { cout<<(double)a/b<<endl; t++; printf("Case %d: %d.",t,a/b); int remain=a%b; for(int i=0;i<c;i++)///小数部分单独提出 { remain*=10; int temp=remain/b; if(i==c-1&&temp>=5)temp++; printf("%d",temp); remain%=b; } printf("\n"); } return 0; } ///double 默认最长6位,不足6位不补 ///习题2-6排列 #include <stdio.h> #include <stdlib.h> int compare(const void *a, const void *b); int main(int argc, char **argv){ int arr[9]; int abc, def, ghi; for(abc = 100; abc <334; abc++){ def = 2 * abc; ghi = 3 * abc; arr[0] = abc/100; arr[1] = (abc/10)%10; arr[2] = abc%10; arr[3] = def/100; arr[4] = (def/10)%10; arr[5] = def%10; arr[6] = ghi/100; arr[7] = (ghi/10)%10; arr[8] = ghi%10; qsort(arr, 9, sizeof(int), compare); int m; for( m = 0; m<9; m++){ if(arr[m] != m+1){ break; } } if(m == 9){ printf("%d %d %d\n",abc, def, ghi); } } return 0; } int compare(const void *a, const void *b){ return *(int*)a - *(int*)b; }