本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );
其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
思路分析:
问题:
- 是否是完全平方数
- 如何判度N中两数相同
解决:
- 利用sqrt开平方,判断是否是完全平方数
- 数组存储、利用双重循环(类似双指针)遍历整个数组中所存的数(暴力法,复杂度高,易想)
实现代码:
int IsTheNumber ( const int N ){
int n = N; //N 被const固定,赋给n,方便后面运算
int t = sqrt(N); //开平方
int a[10]; //数组
int i = 0;
if(t * t != N) return 0;//判断是否事完全平方数,不是返回0
else{ //是则继续判断是否存在两数相等
for(i = 0;n > 0;i++){ //利用数组将N的各位数存下
a[i] = n % 10;
n = n/10;
}
for(int j = 0;j < i;j++){ //双重循环在数组中找相同值,有则返1
for(int k = j+1; k < i;k++){
if(a[j] == a[k])
return 1;
}
}
return 0;
}
}