寒假作業:
現在小學的數學題目也不是那麼好玩的。
看看這個寒假作業:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每個方塊代表1~13中的某乙個數字,但不能重複。
比如:6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算兩種解法。(加法,乘法交換律後算不同的方案)
你一共找到了多少種方案?
請填寫表示方案數目的整數。
注意:你提交的應該是乙個整數,不要填寫任何多餘的內容或說明性文字。
用全排列再進行判斷時間太長,**跑不出來,很心塞。。。。用和上篇方格填數的思路來寫。對每個位置進行不重複的填數。因為是標準的二維陣列,所以不需要用額外的flag陣列來看是不是可以填數。要注意的是vis陣列表示的是從1-13的數,在這裡我們捨棄0,從1開始訪問。明顯全排列再判斷複雜度太高,所以我們對於其做剪枝,每次填數都去判斷一下。不滿足其中乙個等式就返回,以便減少演算法的複雜度。
#include#includeusing namespace std;
int vis[14];
int map[4][3];
int sum;
int judge(int n)
if (n % 12 == 5)//第二個等式
if (n % 12 ==8)//第三個等式
if (n % 12 == 11)//第四個等式,判斷完畢
printf("%d+%d=%d\n", map[0][0], map[0][1], map[0][2]);
printf("%d-%d=%d\n", map[1][0], map[1][1], map[1][2]);
printf("%d*%d=%d\n", map[2][0], map[2][1], map[2][2]);
printf("%d/%d=%d\n\n", map[3][0], map[3][1], map[3][2]);
}return 1;
}void dfs(int n)
if (x == 4)//填滿數判斷
else
dfs(n + 1);
vis[i] = 0;
}} }
}int main()
簡化後****)
using namespace std;
int a[20],vis[20],sum=0;
void dfs(int x)
for(int i=1; i<=13; i++)//列舉要填的數
} return;
} int main()
藍橋杯 寒假作業
現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 如果顯示不出來,可以參見 圖1.jpg 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 13 9 8 1 3 4 12 10 2 5 以及 7 6 13 9 8 1 3 4 12 10 2 5 就算兩種解法。加法,乘法交換律後算不同...
藍橋杯 寒假作業
寒假作業 寒假作業 現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 如果顯示不出來,可以參見 圖1.jpg 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 13 9 8 1 3 4 12 10 2 5 以及 7 6 13 9 8 1 3 4 12 10 2 5 就算兩種解法。加法...
藍橋杯 寒假作業
題目描述 現在小學的數學題目也不是那麼好玩的。看看這個寒假作業 每個方塊代表1 13中的某乙個數字,但不能重複。比如 6 7 139 8 13 4 1210 2 5 以及 7 6 139 8 13 4 1210 2 5 就算兩種解法。加法,乘法交換律後算不同的方案 你一共找到了多少種方案?輸入 輸出...