2017/National _Java_C/2/数字划分
生活随笔
收集整理的這篇文章主要介紹了
2017/National _Java_C/2/数字划分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:數字劃分
w星球的長老交給小明一個任務:1,2,3…16 這16個數字分為兩組。
要求:這兩組數字的和相同,并且,兩組數字的平方和也相同,并且,兩組數字的立方和也相同。
請你利用計算機的強大搜索能力解決這個問題。
并提交1所在的那個分組的所有數字。
這些數字要從小到大排列,兩個數字間用一個空格分開。
即類似:1 4 5 8 … 這樣的答案。
注意,只提交這一組數字,不要填寫任何多余的內容。
笨笨有話說:
只要一個組的成員確定了,另一個組的成員也就確定了。枚舉一個組的成員就可以了。
憑直覺,兩個組的成員數目不會差太多吧。
歪歪有話說:
既然求 1 所在的那個組,那只要枚舉剩余的成員就可以了。
貌似都是8個成員的可能性很大啊。
Ideas
常規套路應該是用DFS搜索(提供C++版本),但通過Python的itertools組合數combinations也可以。
C++
#include <iostream> #include <cstring>using namespace std;bool temp[16]; int sum1 = 0, sum2 = 0, sum3 = 0; int num[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};void dfs(int n, int ans1, int ans2, int ans3) {if (n == 16)return;if (ans1 > sum1 || ans2 > sum2 || ans3 > sum3)return;if (ans1 == sum1 && ans2 == sum2 && ans3==sum3) {for (int i = 0; i < 16; i++)if (!temp[i]) cout << num[i] << ' ';cout << endl << endl;}dfs(n + 1, ans1, ans2, ans3);temp[n] = true;dfs(n + 1, ans1 + num[n], ans2 + num[n] * num[n], ans3 + num[n] * num[n] * num[n]);temp[n] = false; }int main() {memset(temp, 0, sizeof(temp));for (int i : num) {sum1 += i;sum2 += i * i;sum3 += i * i * i;}sum1 /= 2;sum2 /= 2;sum3 /= 2;dfs(0, 0, 0, 0);return 0; }Python
import itertoolsnums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] for item in itertools.combinations(nums, 8):a = list(item)b = list(set(nums) ^ set(item))if sum(a) == sum(b):if sum([x ** 2 for x in a]) == sum([x ** 2 for x in b]):if sum([x ** 3 for x in a]) == sum([x ** 3 for x in b]):print(a, b) from itertools import combinationsdef check(n1: list, n2: list) -> bool:if sum(n1) == sum(n2):n3 = [i ** 2 for i in n1]n4 = [i ** 2 for i in n2]if sum(n3) == sum(n4):n5 = [i ** 3 for i in n1]n6 = [i ** 3 for i in n2]if sum(n5) == sum(n6):print(f"n1 = {n1}, n2 = {n2}")return Truereturn Falseif __name__ == '__main__':nums = [i for i in range(1, 17)]for item in combinations(nums, 8):if check(list(set(nums) - set(item)), list(item)):exit()總結
以上是生活随笔為你收集整理的2017/National _Java_C/2/数字划分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017/Province_C_C++_
- 下一篇: 867. 转置矩阵