一.题目
本题要求实现一个函数,判断任一给定整数
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
结尾无空行
二.思路
1.要求是完全平方数,则 可以用sqrt 或 pow 函数 ,计算出其的(int)算术平方根,若算术平方根的平方 != N,则肯定不符合题目(注意:题目中头文件包括math.h,可以用sqrt 或 pow 函数;若没有头文件,则需用循环实现完全平方数的验证)。
2.要求至少要两个数字相同的完全平方数,则N至少为三位整数。
3.至少要两个数字相同,可以用一个数组存储N的0~9出现的个数,最后若有a[i] >= 2,则符合条件。
三.代码实现
int IsTheNumber ( const int N )
{
int i,n,a[10]= {0},k = 0,m = N;
// 需要对a[10]初始化,a[i] 代表 i 出现的次数
while( m!= 0)
{
n = m %10;
a[n] ++;
m = m / 10;
}//注意这里不能改变N的值,因为const int N 相当于N是一个整形常数
for( i =0 ;i<10 ;i++)
{
if(a[i] >= 2 )
{
k = 1;
}
}
if(N < 0)
{
return 0;
}
/*
//若没有math.h头文件
for(i =0;i<N ;i++)
{
if( i * i == N )
{
break;
}
}
if(i == N)
{
return 0;
}
else
{
if(k)
{
return 1;
}
else
{
return 0;
}
}
*/
n = sqrt(N);
if( n *n == N )
{
if(k )
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}