一、需求
- 本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
- 函数接口定义如下
int search( int n );
- 其中传入的参数
int n
是一个三位数的正整数(最高位数字非0)。 - 函数
search
返回[101, n]区间内所有满足条件的数的个数。
二、裁判程序样例
#include <stdio.h>
#include <math.h>
int search( int n );
int main()
{
int number;
scanf("%d",&number);
printf("count=%d\n",search(number));
return 0;
}
/* 你的代码将被嵌在这里 */
三、测试样例
- 输入样例
500
- 输出样例
count=6
四、思路分析
- 定义一个数组,把三位数的每一位存放到数组中;
- 比较数组中的三个数字,若其中两个相等,那么对该三位数开根号,分别用double类型和int类型的变量来保存;
- 若double类型变量的值与int类型变量的值相等(int会向double转换),则count++。
代码是这样的:
int search( int n ) {
int s[3];
double num1;
int num2;
int count = 0;
int temp;
int j;
for(int i = 101; i <= n; i++) {
j = 0;
temp = i;
while(temp) {
s[j] = temp % 10;
temp = temp / 10;
j++;
}
if(s[0] == s[1] || s[0] == s[2] || s[1] == s[2]) {
num1 = sqrt((double)i);
num2 = sqrt((double)i);
if(num1 == num2) {
count++;
}
}
}
return count;
}