#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;
}
int IsTheNumber ( const int N )
{
int kpf,a,b,c,d;
if(sqrt(N)==(int)sqrt(N));
{
a=N/100;
b=N%10;
c=N/10;
d=c%10;
if(a==b||a==d||b==d)
{
return 1;
}
}
return 0;
}
a=N/100;
b=N%10;
c=N/10;
d=c%10;
这里判断重复数字的方法不对,输入的N并不一定是3位数字,代码修改如下:
#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;
}
int IsTheNumber ( const int N )
{
int a[10],t,i,j;
if(sqrt((double)N)==(int)sqrt((double)N));
{
i=0;
t = N;
while(t)
{
a[i] = t%10;
t/=10;
//判断有无重复数字
for(j=0;j<i;j++)
{
if(a[j]==a[i])
return 1;
}
i++;
}
}
return 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;
}
int IsTheNumber ( const int N ){
int n, p, t;
t = N;
n = (int)sqrt(N);
if( N == n*n ){
int a[10] = {0};
while(t){
p = t%10;
if(!a[p]){
a[p] = 1;
}else{
return 1;
}
t /= 10;
}
}
return 0;
}
运行结果如图: