zoukankan      html  css  js  c++  java
  • 三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题

    原创


    三羊献瑞

    观察下面的加法算式:

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

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

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

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

    分析:三羊生瑞气这个数中只能是数码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

  • 相关阅读:
    2020年秋第四五周-代码规范,结对要求
    2020年秋第四五周-四则运算试题生成
    同时装了WPS和Office新建的时候不知道是哪个文件
    开讲啦郑强演讲:你为什么读大学?
    PC版kindle无法连接网络
    前端编程良好习惯
    教你隐藏盘符,把你的小姐姐藏起来
    腾讯,比你想的更有趣
    U盘之父中国朗科的一生:我曾打败索尼,如今却只能靠收租为生
    动作之概述
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9156554.html
Copyright © 2011-2022 走看看