7-2 水仙花数(20 分) 分数 20 作者 陈春晖 单位 浙江大学 水仙花数是指一个n位正
时间: 2023-09-07 10:01:25 浏览: 1065
水仙花数是指一个n位正整数,它的每个位上的数字的n次幂之和等于它本身。例如,一个3位水仙花数为153,因为1^3 + 5^3 + 3^3 = 153。
要解决这个问题,我们可以遍历所有的n位数,然后逐个判断是否为水仙花数。具体的算法如下:
1. 输入一个正整数n,表示要找到的水仙花数的位数。
2. 使用一个循环,从10^(n-1)开始遍历到10^n - 1,依次判断每个数是否满足水仙花数的条件。
3. 对于每个数,将其转化为字符串形式,并计算每个数字的n次幂之和。
4. 如果和等于该数本身,则输出该数,即为一个水仙花数。
5. 完成循环后,输出所有找到的水仙花数。
例如,当n为3时,算法的执行过程如下:
1. 输入n=3
2. 从100开始遍历到999
- 对于每个数,如123,计算1^3 + 2^3 + 3^3 = 36
- 36不等于123,继续下一个数
3. 完成循环后,输出所有找到的水仙花数
经过计算,我们可以得到所有3位水仙花数为153和370。
总之,通过将一个n位数转化为字符串,并计算每个数位上的数字n次幂之和,我们可以判断一个数是否为水仙花数。根据这个思路,我们可以编写一个程序来找到任意位数的水仙花数。
相关问题
7-2 求矩阵鞍点的个数 分数 20 作者 陈春晖 单位 浙江大学 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。 输出格式: 鞍点的个数
以下是 Python 代码实现:
```python
n = int(input())
matrix = []
for i in range(n):
row = list(map(int, input().split()))
matrix.append(row)
count = 0
for i in range(n):
for j in range(n):
if matrix[i][j] == max(matrix[i]) and matrix[i][j] == min([matrix[k][j] for k in range(n)]):
count += 1
print(count)
```
实现思路:
1. 首先读入矩阵的大小 n 和矩阵本身,存储在一个二维列表 matrix 中。
2. 遍历矩阵中的每一个元素,判断该元素是否为该行的最大值和该列的最小值。
3. 如果该元素是该行的最大值且该列的最小值,则将计数器 count 加 1。
4. 最后输出 count 的值,即为鞍点的个数。
7-14 偶数位特殊序列和 分数 40 作者 陈春晖 单位 浙江大学 给定不超过9的正整数a,给定正整数n,n是偶数,4<=n<=18,要求编写程序求aa+aaaa+aaaaaa+⋯+aa⋯a(n个a)之和。
算法1:
根据等比数列求和公式,可以得到:
$S=a\times\frac{1-10^n}{1-10}=\frac{a(10^n-1)}{9}$
代码如下:
#include <iostream>
using namespace std;
int main() {
int a, n;
cin >> a >> n;
long long sum = 0, num = a;
for (int i = 0; i < n / 2; i++) {
sum += num;
num = num * 100 + a * 11;
}
cout << sum << endl;
return 0;
}
算法2:
观察题目中的数字序列,可以发现每个数字都可以表示为$a\times10^k+b\times10^{2k}$的形式,其中$k$为该数字在序列中的位置,$b$为$a$的个位数。因此,可以先计算出$b\times10^{2k}$的和,再加上$a\times\frac{10^{2n}-1}{99}$的和即可。
代码如下:
#include <iostream>
using namespace std;
int main() {
int a, n;
cin >> a >> n;
int b = a % 10;
long long sum1 = 0, sum2 = 0;
for (int i = 1; i <= n / 2; i++) {
sum1 += b * (long long)pow(10, 2 * i - 2);
sum2 += a * (long long)(pow(10, 2 * n - 2 * i) - 1) / 99;
}
long long ans = sum1 + sum2;
cout << ans << endl;
return 0;
}
阅读全文