1. 程式人生 > >藍橋杯 三羊獻瑞

藍橋杯 三羊獻瑞

題目:


三羊獻瑞

觀察下面的加法算式:

      祥 瑞 生 輝
  +   三 羊 獻 瑞
-------------------
   三 羊 生 瑞 氣

其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。

請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多餘內容。

程式碼:

#include <iostream>
#include<stdio.h>

using namespace std;

int main(int argc, char *argv[])
{
    int a,b,c,d,e,f,g,h;//分別代表:祥,瑞,生,輝,三,羊,獻,氣
    int sum1=0,sum2=0,sum=0;//分表代表: 祥 瑞 生 輝,三 羊 獻 瑞, 三 羊 生 瑞 氣

    for(a=1;a<=9;a++)//從1開始,因為數字首位不能為0
        for(b=0;b<=9;b++)
            for(c=0;c<=9;c++)
                for(d=0;d<=9;d++)
                    for(e=1;e<=9;e++)//從1開始,因為數字首位不能為0
                        for(f=0;f<=9;f++)
                            for(g=0;g<=9;g++)
                                for(h=0;h<=9;h++)
                                {
                                    if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h
                                       && b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h &&
                                       c!=d&&c!=e&&c!=f&&c!=g&&c!=h && d!=e&&d!=f
                                       &&d!=g&&d!=h && e!=f&&e!=g&&e!=h && f!=g&&f!=h
                                       && g!=h)
                                    {
                                        sum1=a*1000 + b*100 + c*10 + d;
                                        sum2=e*1000 + f*100 + g*10 + b;

                                        sum = e*10000 + f*1000 + c*100 + b*10 + h;

                                        if(sum1+sum2 == sum)
                                        {
                                            printf("%d%d%d%d",e,f,g,b);
                                        }
                                    }
                                }
    cout<<endl;
    return 0;
}

程式碼:
#include <cstdio>
 #include <algorithm>
using namespace std;

int main() {
    int a[10];
    for (int i = 0; i < 10; i++) a[i] = i;

    do {
        if (!a[2] || !a[6]) continue;
        int x =              a[2]*1000 + a[3]*100 + a[4]*10 + a[5];
        int y =              a[6]*1000 + a[7]*100 + a[8]*10 + a[3];
        int z = a[6]*10000 + a[7]*1000 + a[4]*100 + a[3]*10 + a[9];
        if (x + y == z) printf("%d + %d = %d\n", x, y, z);
    } while (next_permutation(a, a+10));

    return 0;
}