PTA 6-7 统计某类完全平方数 (20分)

PTA 6-7 统计某类完全平方数 (20分)

本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。

函数接口定义:

int IsTheNumber ( const int N );

裁判测试程序样例:

#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、满足至少有两位数字相同的完全平方数至少是三位数。故满足条件的N应该从100开始。
2、完全平方数必为整数,所以要加整数限定,显然,若一个数开方后是整数,则必然满足
sqrt(N)= =sqrt(int)(N)。如果一个数开方后是小数,那么强制转为int后结果必然和未强转的结果不同。
3、至于统计该数字中某一个数字出现的频率,可以考虑将数字拆分后存储到一个数组中,用数组的索引0~9代表数字,索引所对应的元素代表该数字出现的频率,遍历数组,若存在元素的值大于等于二的时候返回1,否则返回0即可。
4、数字的拆分用到十进制的定义:要获得十进制数上每一位的值,将该数字除以对应位的位权后模10即可。此外,为了计算方便,可以在取得对应位置上的数字后将其舍去,除以10即可。这两部做成一个循环,循环的出口,当数字整体小于10的时候退出即除以10==0即可

代码:

int toArray(int N){
    int arr[10]={0};
    int res=N;	//N为const不能被改变
    while(res!=0)
    {
        int tem=res%10;
        arr[tem]++;
        res=res/10;
    }
    for(int i=0;i<10;i++){
        if(arr[i]>=2){
            return 1;
        }
            
    }
    return 0;
}
int IsTheNumber ( const int N ){
    if(N>=100){
       if(sqrt(N)==(int)sqrt(N)){//是一个完全平方数
           return toArray(N);
       }
    }
    return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值