长度为 2×n 的正整数,如果左边 n 个数字之和=右边 n 个数字之和,那么我 们称之为“幸运号码”。例如 99,1230 就是幸运号码。下面给出正整数n,求出 长度为 2×n 的幸运号码的总数,注意这里的幸运号码不能包含前导 0。 给出C++代码
时间: 2023-05-24 07:04:31 浏览: 152
幸运数问题C++源程序
```c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
long long ans = 0;
for (int i = 1; i <= 9; i++) {
for (int j = i; j <= 9; j++) {
if ((i + j) % 2 != 0) continue; // 左右两边的数字和必须是偶数
int k = n - 1;
int sum = (i + j) / 2;
for (int t = 1; t < k; t++) {
sum += 9; // 每个空位都可以填 1~9 任意数字
}
if (sum > 9) continue; // 如果 sum 大于 9,说明左右两边的数字和最多只能为 18,不符合题意
if (sum < i || sum < j) continue; // 左边和右边的数字都必须小于等于 sum
if (k == 1 && i == j && i == sum) continue; // 特殊情况:长度为 2 的幸运号码只有一种,即两个数字相等且等于它们的和
if (k == 1) {
ans++; // 长度为 2 的幸运号码有多种,直接累加
} else {
ans += 2; // 长度>2 的幸运号码必然有两种(左右数字交换),直接乘以 2 累加
}
}
}
printf("%lld\n", ans);
return 0;
}
```
阅读全文