三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题

时间:2022-09-10 14:42:46

原创


三羊献瑞

观察下面的加法算式:

    祥 瑞 生 辉
 + 三 羊 献 瑞
 -------------------
三 羊 生 瑞 气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题

分析:三羊生瑞气这个数中只能是数码1,所以其他7个数字不必考虑是1

法一(枚举):

枚举祥、瑞、生、辉、羊、献、气这7个字,然后判断是否满足等式即可。

public class 三羊献瑞 {
    public static void main(String args[]) {
        int tt=0;
        int arr[]=new int[7];
        for(arr[0]=2;arr[0]<=9;arr[0]++) {    //
            for(arr[1]=0;arr[1]<=9;arr[1]++) {    //
                if(arr[1]==1) {
                    continue;
                }
                for(arr[2]=0;arr[2]<=9;arr[2]++) {    //
                    if(arr[2]==1) {
                        continue;
                    }
                    for(arr[3]=0;arr[3]<=9;arr[3]++) {    //
                        if(arr[3]==1) {
                            continue;
                        }
                        for(arr[4]=0;arr[4]<=9;arr[4]++) {    //
                            if(arr[4]==1) {
                                continue;
                            }
                            for(arr[5]=0;arr[5]<=9;arr[5]++) {    //
                                if(arr[5]==1) {
                                    continue;
                                }
                                for(arr[6]=0;arr[6]<=9;arr[6]++) {    //
                                    if(arr[6]==1) {
                                        continue;
                                    }
                                    int flag[]= {0,0,0,0,0,0,0,0,0,0};
                                    int i=0;
                                    int ff=0;
                                    for(i=0;i<=6;i++) {    //判断是否包含相同的数码
                                        if(flag[arr[i]]==1) {
                                            ff=1;
                                            break;
                                        }
                                        flag[arr[i]]=1;
                                    }
                                    if(ff==1) {    //有相同数码
                                        continue;
                                    }
                                    if((arr[0]*1000+arr[1]*100+arr[2]*10+arr[3])+(1000+arr[4]*100+arr[5]*10+arr[1])==10000+arr[4]*1000+arr[2]*100+arr[1]*10+arr[6]) {
                                        System.out.println(1000+arr[4]*100+arr[5]*10+arr[1]);
                                        tt=1;
                                    }
                                    if(tt==1) {
                                        break;
                                    }
                                }
                                if(tt==1) {
                                    break;
                                }
                            }
                            if(tt==1) {
                                break;
                            }
                        }
                        if(tt==1) {
                            break;
                        }
                    }
                    if(tt==1) {
                        break;
                    }
                }
                if(tt==1) {
                    break;
                }
            }
            if(tt==1) {
                break;
            }
        }
    }
}

法二(全排列):

全排列思想看我另外一篇博客:https://www.cnblogs.com/chiweiming/p/8727164.html

0、2、3、4、5、6、7、8、9这8个数码进行全排列,每产生一种全排列就将全排列前7

位数取出进行运算,满足条件算式输出即可。

public class 三羊献瑞{
    static int flag=0;
    static int arr[]= {0,2,3,4,5,6,7,8,9};
    static void Swap(int a,int b) {
        int temp=0;
        temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
    static void Quan(int num) {
        if(num==8) {    //产生一种全排列
            if((arr[0]*1000+arr[1]*100+arr[2]*10+arr[3])+(1000+arr[4]*100+arr[5]*10+arr[1])==10000+arr[4]*1000+arr[2]*100+arr[1]*10+arr[6]) {
                System.out.println(1000+arr[4]*100+arr[5]*10+arr[1]);
                flag=1;
            }
            return;
        }
        int i=0;
        for(i=num;i<=8;i++) {
            Swap(i,num);
            Quan(num+1);
            if(flag==1) {
                return;
            }
            Swap(i,num);
        }
    }
    public static void main(String args[]) {
        Quan(0);
    }
}

答案:1085

22:07:35

2018-06-08