原創 三羊獻瑞 觀察下麵的加法算式: 祥 瑞 生 輝 + 三 羊 獻 瑞 三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖1.jpg】) 其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。 請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多餘內容。 分析:三羊生瑞氣這個數中三 ...
原創
三羊獻瑞
觀察下麵的加法算式:
祥 瑞 生 輝
+ 三 羊 獻 瑞
-------------------
三 羊 生 瑞 氣
(如果有對齊問題,可以參看【圖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