字符數組-豎式問題

豎式問題:

找出所有形如abc*de(三位數乘以兩位數)的算式,使得在完整的豎式中,所有數字都屬於一個特定的數字集合(也就是a b c d e 以及abc*e abc*d abc*de結果的每一位數字都屬於一個集合。下面你輸入數字集合(相鄰數字之間沒有空格),輸出所有豎式。每個豎式前應有編號,之後應有一個空行。最後輸出解的總數,下面是輸入輸出樣例(爲了便於觀察,豎式中的空格改用小數點顯示,但所寫程序中應該輸出空格,而非小數點)

樣例輸入

2357

樣例輸出

<1>

..775

X..33

-----

.2325

2325.

-----

25575

 

The number of solutions = 1

問題分析:

嘗試所有的abc和de,判斷是否滿足條件。也就是判斷每一位數是否都在你輸入的那個數字集合中。

接下來有兩個問題:判斷和輸出。

我們先考慮輸出,因爲它比較簡單。每個豎式需要打印7行,但不一定要用7條printf語句,1條足矣。首先計算第一行乘積x=abc*e,然後第二行y=abc*d,最後是總乘積z=abc*de,然後一次性打印出來:

printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z);//%5d按照5位數打印,不足5位在前面補空格。

完整代碼如下

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int count =0;
    char s[20], buf[99];
    scanf("%s",s);
    int abc, de, i;
    for(abc=111; abc<=999; abc++){
        for(de=11; de<=99; de++){
            int x = abc*(de%10), y = abc*(de/10), z = abc*de;
            sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);//sprinf輸出到字符串
            int ok = 1;
            for(i=0; i < strlen(buf); i++){
                if(strchr(s, buf[i])== NULL){//這裏是判斷是不是每一位數字都在你輸入的集合中,strchr的作用是在一個字符串中查找單個字符
                    ok = 0;
                    break;
                }
            }
            if(ok){
                printf("<%d>\n",++count);
                printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z);
            }
        }

    }
    printf("The number of solution = %d\n", count);
    return 0;
}

樣例結果:

發佈了62 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章