提交时间:2026-02-05 15:04:52

运行 ID: 83997

#include <iostream> #include <algorithm> #include <string> using namespace std; // 将数字数组的[start, end)区间转为整数 long long to_num(int nums[], int start, int end) { long long res = 0; for (int i = start; i < end; ++i) { res = res * 10 + nums[i]; } return res; } int main() { int N; cin >> N; // 初始化1~9的数组,用于全排列 int digits[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int count = 0; // 遍历1~9的所有全排列 do { // 拆分a的位数:1~7位(b和c至少各1位) for (int a_len = 1; a_len <= 7; ++a_len) { long long a = to_num(digits, 0, a_len); if (a >= N) break; // a必须小于N,否则b/c为负,无意义 // 拆分b和c的位数:剩余9-a_len位,b至少1位,c至少1位 int remain = 9 - a_len; for (int b_len = 1; b_len < remain; ++b_len) { int c_len = remain - b_len; long long b = to_num(digits, a_len, a_len + b_len); long long c = to_num(digits, a_len + b_len, 9); // 验证b能被c整除,且a + b/c == N if (b % c == 0 && (a + b / c) == N) { count++; } } } } while (next_permutation(digits, digits + 9)); cout << count << endl; return 0; }