循環結構程序設計

參考鏈接:http://blog.csdn.net/litiouslove/article/details/7891700

水仙花數(daffodil)

題目:輸出100 ~ 999中的所有水仙花數,若3位數ABC滿足ABC = A^3 + B^3 + C^3,則稱其為水仙花數。例如153 = 1^3 + 5^3 + 3^3,所以153是水仙花數。
源碼:

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

韓信點兵(hanxin)

題目:韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先后以三人一排、五人一排、七人一排地變換隊形,而他每次都只是掠一眼隊伍的排位就知道人數了。輸入3個非負整數a,b,c,表示每種隊形排尾的人數(a<3,b<5,c<7),輸出總人數的最小值(或報告無解)。已知總人數不小于10,不超過100。
樣例輸入: 2 1 6
樣例輸出: 41
樣例輸入: 2 1 4
樣例輸出: No Answer
源碼:

#include <stdio.h>  
int main(void)  
{  
    int i, a, b, c;  
    scanf("%d%d%d", &a, &b, &c);  
    for(i = 10; i <= 100; i++)  
    {  
        if(i%3 == a && i%5 ==b && i%7 ==c)  
        {  
            printf("%d\n", i);  
            break;  
        }  
    }  
    if(i == 101)  
        printf("No answer");  
    return 0;  
}  

倒三角形(triangle)

題目:輸入正整數n<=20,輸出一個n層的倒三角形。例如n=5時輸出如下:

#########  
 #######  
  #####  
   ###  
    #  

源碼:

#include <stdio.h>  
int main(void)  
{  
    int i, j, k, n;  
    scanf("%d", &n);  
    for(i = 0; i < n; i++)  
    {  
        k = i;  
        for(j = 0; j < k; j++)  
            printf(" ");  
        for(j = 0; j < 2*n-2*i-1; j++)  
            printf("#");  
        printf("\n");  
    }  
    return 0;  
}  

子序列的和(subsequence)

題目:輸入兩個正整數n<m<10^6,輸出1/n^2 + 1/(n+1)^2 + …… + 1/m^2,保留5位小數。例如n=2,m=4時答案是0.42361;n=65536,m=655360時答案為0.00001。注意:本題有陷阱。
分析:還是for循環累加。本題陷阱在于n比較大時,nn會溢出,所以 1/n^2 應該用 1/n/n 而不是 1/(nn)。
源碼:

#include <stdio.h>  
int main(void)  
{  
    int n, m, i;  
    double sum = 0;  
    scanf("%d%d", &n, &m);  
    for(i = n; i <= m; i++)  
        sum += 1.0/i/i;  
    printf("%.5lf\n", sum);  
    return 0;  
}  

分數化小數(decimal)

題目:輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點后c位。a,b <= 10^6,c <= 100。例如a=1,b=6,c=4時應輸出0.1667.
分析:考察格式化輸出,printf("%.lf", x, y, z); 中兩個可用后邊的變量表示。*
源碼:

#include <stdio.h>  
int main(void)  
{  
    int a, b, c;  
    double x;  
    scanf("%d%d%d", &a, &b, &c);  
    x = 1.0*a/b;  
    printf("%.*lf\n", c, x);    //printf("%*.*lf", x, y, z) 第一個*對應x,第二個*對應y,lf對應z  
    return 0;  
}  

排列(permutition)

題目:用1,2,3……9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi = 1:2:3。輸出所有解。提示:不必太動腦筋。
分析:利用數組,a[1]~a[9]賦值為0,令a[出現的數字] = 1,若a[1] + a[2] + …… +a[9] == 9,則全部數字都出現。
源碼:

#include <stdio.h>  
int main(void)  
{  
    int x, y, z, a[10] = {0};  
    for(x = 100; x < 333; x++)  
    {  
        y = 2*x;  
        z = 3*x;  
        //令a[出現的數字] = 1  
        a[x/100] = a[x/10%10] = a[x%10] = 1;  
        a[y/100] = a[y/10%10] = a[y%10] = 1;  
        a[z/100] = a[z/10%10] = a[z%10] = 1;  
        int i, s = 0;  
        for(i = 1; i < 10; i++)  
            s += a[i];  
        if(s == 9)  
            printf("%d\t%d\t%d\n", x, y, z);  
        for(i = 1; i < 10; i++)  //重新賦值為0  
            a[i] = 0;  
    }  
    return 0;  
}  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容