pta中6-7完全平方数,有点不能理解为什么执行不出结果。求指导

#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;
}

运行结果如图

img


希望对题主有所帮助,可以的话,帮忙点个采纳!

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632