1. 程式人生 > >小粉書第2章

小粉書第2章

韓信點兵 swe 例題 倒三角 h+ color tdi %d clas

例題 2-3 近似計算

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int t=1,n=1;
 5     double term,sum=0;
 6     do{
 7         term = 1.0/n;
 8         sum += term*t;
 9         n += 2;
10         t = -t;
11     }while(term > 1e-6);
12     printf("%.6f\n",sum);
13 
14 }

例題 2-1 水仙花數

#include<stdio.h>
int
main() { for(int i=100; i<=999; ++i){ int a = i/100, b = i/10%10, c = i%10; if(i == a*a*a + b*b*b + c*c*c) printf("%d ",i); } return 0; }

例題 2-2 韓信點兵

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a,b,c,cnt=1,flag=1;
 5     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
6 for(int i=10; i<=100; ++i) 7 if(i%3==a && i%5==b && i%7==c){ 8 printf("Case %d:%d\n",cnt++,i); 9 flag=0; 10 break; 11 } 12 if(flag) 13 printf("Case %d: No answer\n",cnt++); 14 flag = !flag;
15 } 16 return 0; 17 }

例題 2-3 倒三角形

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,t;  
 5     scanf("%d",&n);
 6     t=n;    //  將n的值復制給t 
 7     for(int i=0; i<n; ++i){     // 找到圖形每行空格和層數之間的關系 
 8         for(int j=0; j<i; ++j) 
 9             printf(" ");
10         for(int j=0; j<2*t-1; ++j)   
11             printf("#");
12         printf("\n");
13         t--;
14     }
15     return 0;
16 }

例題 2-4 子序列的和

 1 #include<stdio.h>
 2 int main()
 3 {
 4     long long n,m;
 5     double sum=0;
 6     while(scanf("%lld%lld",&n,&m)!=EOF){
 7         if(n==0 || m==0)
 8             break;
 9         for(long long i=n; i<=m; ++i){
10             double x = 1.0 / (i * i);
11             sum += x;
12         }
13         printf("%.5f\n",sum);
14         sum = 0;   // 註意歸零 
15     }        
16     return 0;
17 }

例題 2-5 分數化小數

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a,b,c,x,cnt=1;
 5     while(scanf("%d%d%d",&a,&b,&c)!=EOF){
 6         if(a==0 && b==0 && c==0)
 7             break;
 8         printf("Case %d: %d.",cnt++,a/b);    // 打印整數部分
 9 
10         for(int i=1; i<c; ++i){   // 打印小數部分
11             x = a % b * 10 / b;
12             printf("%d",x);
13             a = a % b * 10 % b;
14         }
15         if(a % b * 10 / b >= 5)   // 最後一位四舍五入
16             printf("%d\n",x+1);
17         else
18             printf("%d\n",x);
19     }
20     return 0;
21 }

例題 2-6 排列

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int r1,r2,r3;
 5     for(int i=123; i<=329; ++i){   // 987/3 = 329
 6         r1 = i;
 7         r2 = 2 * i;
 8         r3 = 3 * i;
 9         int a = r1 % 10, b = r1 / 10 % 10, c = r1 / 100;
10         int d = r2 % 10, e = r2 / 10 % 10, f = r2 / 100;
11         int g = r3 % 10, h = r3 / 10 % 10, m = r3 / 100;
12         if(a+b+c+d+e+f+g+h+m == 45 && a*b*c*d*e*f*g*h*m == 362880)
13             printf("%d %d %d\n",r1,r2,r3);
14     }
15     return 0;
16 }

思考題 題目2

1 #include<stdio.h>
2 int main() {
3     double i=0;
4     printf("%.1f\n",i+0.1); 
5     for(i=0; i!=10; i+=0.1)
6         printf("%.lf\n",i);
7     return 0;
8 }

程序會一直跑下去,沒有搞明白,看了一篇帖子,說是和double的精度有關,留坑待填。

順便吐槽一下,一遍腰疼一遍寫代碼,女性是多麽需要關愛的群體。

小粉書第2章