5 条题解
-
-1
C++
和Python
都可以使用内置全排列来实现本题。C++
中algorithm
库提供了next_permutation()
用来生成排列C++
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> digits = {1, 2, 3, 4, 5, 6, 7, 8, 9}; while (next_permutation(digits.begin(), digits.end())){ int num1 = digits[0] * 100 + digits[1] * 10 + digits[2]; int num2 = digits[3] * 100 + digits[4] * 10 + digits[5]; int num3 = digits[6] * 100 + digits[7] * 10 + digits[8]; if (num2 == 2 * num1 && num3 == 3 * num1) printf("%d %d %d\n", num1, num2, num3); } return 0; }
Python
中itertools
库提供了全排列迭代器permutations
from typing import List from itertools import permutations digits: List[int] = list(range(1, 10)) for perm in permutations(digits): num1: int = perm[0] * 100 + perm[1] * 10 + perm[2]; num2: int = perm[3] * 100 + perm[4] * 10 + perm[5]; num3: int = perm[6] * 100 + perm[7] * 10 + perm[8]; if num2 == 2 * num1 and num3 == 3 * num1: print(f"{num1} {num2} {num3}")
当然,这里的全排列会有许多冗余的排列生成,比如
num1
> 333 时,往后产生的数都不可能是答案,所以剩下的优化就交给你了。 😸 -
-3
- 1
信息
- ID
- 912
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 218
- 已通过
- 105
- 上传者