1. 程式人生 > >三羊獻瑞——第六屆藍橋杯C語言B組(省賽)第三題

三羊獻瑞——第六屆藍橋杯C語言B組(省賽)第三題

lan font oid 漢字 print ack size IV cnblogs

原創


三羊獻瑞

觀察下面的加法算式:

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

(如果有對齊問題,可以參看【圖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

三羊獻瑞——第六屆藍橋杯C語言B組(省賽)第三題