编写一个函数,利用参数传入一个3位数n,找出101~n之间所有满足既是完全平方数,又有两位数字相同的数,如144、676等,函数返回值为找出的这样的数据的个数。请同时编写主函数调用该函数验证。
时间: 2023-06-07 09:08:53 浏览: 231
好的,我理解了您的要求。以下是符合要求的函数和主函数。
```
#include <stdio.h>
#include <math.h>
int findNumbers(int n) {
int count = 0;
for (int i = 101; i <= n; i++) {
if (sqrt(i) == floor(sqrt(i)) && (i % 11 == 0 || i % 101 == 0 || i % 1001 == 0)) {
count++;
}
}
return count;
}
int main() {
int n, count;
printf("请输入一个3位数n:");
scanf("%d", &n);
count = findNumbers(n);
printf("101 ~ %d之间找到了%d个满足条件的数字\n", n, count);
return 0;
}
```
解释一下函数 `findNumbers()` 的具体实现:
循环遍历 101 至 n,使用 `sqrt()` 函数求出每个数的平方根。如果平方根的值为整数,则说明这个数是完全平方数,接着判断这个数是否有两个相同的数字。这里我们通过取模运算符 `%` 来判断是否有两位数字相同。如果一个数是 11 的倍数,或者 101 的倍数,或者 1001 的倍数,那么这个数一定有两位数字相同,因为这些数只有 1, 0, 1 三个数字。统计满足条件的数字个数并返回。