關於《啊哈!演算法》第三章火柴棍等式“為什麼每個數不能超過1111”
阿新 • • 發佈:2018-12-22
書中說到列舉的上界是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;