1. 程式人生 > >【暴力自動生成排列】(2015)第六屆藍橋杯省賽 C/C++ B組 題解(第三題)

【暴力自動生成排列】(2015)第六屆藍橋杯省賽 C/C++ B組 題解(第三題)

第三題

題目

三羊獻瑞

觀察下面的加法算式:
       祥 瑞 生 輝
  +   三 羊 獻 瑞
-------------------
   三 羊 生 瑞 氣
(如果有對齊問題,可以參看【圖1.jpg】)

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

思路分析

     這是簡單的暴力題,使用next_permutation暴力列舉0~9數字可能組成的各個序列,對每一種序列判斷是否滿足上述條件即可。

執行結果

    1085

程式碼

#include <iostream>
#include<algorithm>
#include<cstring> 
using namespace std;
//a1~a8分別對應“祥瑞生輝三羊獻氣 ” 

int main(int argc, char** argv) {
	int a[10];
	//指定一個使用0~9數字的初始序列
	for(int i=0;i<10;i++){
		a[i]=i;//初始化序列為“0123456789” 
	} 
	
	do{//每次生成一個新的排列次序 
		if(!a[1]||!a[5]) continue; //如若高首位為0,則不需判斷,接著迴圈
		int x=1000*a[1]+100*a[2]+10*a[3]+a[4];
		int y=1000*a[5]+100*a[6]+10*a[7]+a[2];
		int z=10000*a[5]+1000*a[6]+100*a[3]+10*a[2]+a[8];
		if(x+y==z){
			printf("%d\n",y);
		} 
	}while(next_permutation(a,a+10));
	return 0;
}