1. 程式人生 > >關於《啊哈!演算法》第三章火柴棍等式“為什麼每個數不能超過1111”

關於《啊哈!演算法》第三章火柴棍等式“為什麼每個數不能超過1111”

書中說到列舉的上界是1111,這估計是作者的一個近似值。

其實可以更好的減少遍歷的次數就是。總共20根火柴,A、B、C三個數字,每個數字都不能超過7根火柴。

於是我們找到7根火柴能組成最大的數字是711。所以上界是可以精確到711的。

當然也可以通過程式來找到這個上界。


#include<stdio.h>
int f[10]={6,2,5,5,4,5,6,3,7,6} ; //用來儲存每一個 
int fun(int k) {		//用來計算傳進來數所需的總火柴數 
		int num=0;
		while(k)
        {
		    num+=f[k%10];
		    k/=10;
		}
        num+=f[x];
		return num;
}
 
int main(){
	int max=0,c;
	for(int i = 0;i<2000;i++) {	//隨便設定一個比較大的數
		for(int j = 0;j<2000;j++) {
			c=i+j;
			if(fun(i)+fun(j)+fun(c)==20) {	//當火柴數到了20,並且等式A+B=C成立 
				if(j>max) {		//用來獲取能滿足條件的最大值 
					max=j;
				}
			}
		}
	}
	printf("%d",max);	//得出結論711。 
	
	return 0;