[蓝桥杯2016决赛]七星填数-next_permutation枚举
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯2016决赛]七星填数-next_permutation枚举
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
如下圖所示:
在七角星的14個(gè)節(jié)點(diǎn)上填入1~14 的數(shù)字,不重復(fù),不遺漏。要求每條直線上的四個(gè)數(shù)字之和必須相等。
圖中已經(jīng)給出了3個(gè)數(shù)字。請(qǐng)計(jì)算其它位置要填充的數(shù)字,答案唯一。
填好后,請(qǐng)?zhí)峤痪G色節(jié)點(diǎn)的4個(gè)數(shù)字(從左到右,用空格分開)
比如:12 5 4 8
當(dāng)然,這不是正確的答案。
輸出
輸出四個(gè)整數(shù)表示答案,數(shù)字之間用一個(gè)空格分隔
解題思路:
不要枚舉1-14的全排列,枚舉剩下11位就行了
代碼如下:
#include <iostream> #include <algorithm> using namespace std;int a[] = {1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13}; int ans;bool check() {int num1 = a[0] + a[1] + a[2] + a[3];//不要判斷成立,//一個(gè)一個(gè)判斷不成立,這樣寫,可以減少代碼量int num2 = 6 + a[1] + a[4] + 14;if (num1 != num2)return false;int num3 = 6 + a[2] + a[5] + 11;if (num2 != num3)return false;int num4 = a[3] + a[5] + a[7] + a[10];if (num3 != num4)return false;int num5 = a[8] + a[9] + a[7] + 11;if (num4 != num5)return false;int num6 = a[6] + a[10] + a[8] + 14;if (num5 != num6)return false;int num7 = a[0] + a[4] + a[6] + a[9];if (num6 != num7)return false;return true; }int main() {do {if (check()) {for (int i = 0; i < 4; i++) {cout << a[i] << " ";}}} while (next_permutation(a, a + 11));}總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯2016决赛]七星填数-next_permutation枚举的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这些东西也能影响到电脑的稳定性这些东西也
- 下一篇: 电脑在运行中突然死机是怎么回事电脑正常运