习题10-1 判断满足条件的三位数 (15分)

一、需求

  • 本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
  • 函数接口定义如下
int search( int n );
  • 其中传入的参数int n是一个三位数的正整数(最高位数字非0)。
  • 函数search返回[101, n]区间内所有满足条件的数的个数。

二、裁判程序样例

#include <stdio.h>
#include <math.h>

int search( int n );

int main()
{
    int number;

    scanf("%d",&number);
    printf("count=%d\n",search(number));
		
    return 0;
}


/* 你的代码将被嵌在这里 */

三、测试样例

  • 输入样例
500
  • 输出样例
count=6

四、思路分析

  1. 定义一个数组,把三位数的每一位存放到数组中;
  2. 比较数组中的三个数字,若其中两个相等,那么对该三位数开根号,分别用double类型和int类型的变量来保存;
  3. 若double类型变量的值与int类型变量的值相等(int会向double转换),则count++。

代码是这样的:

int search( int n ) {
    int s[3];
    double num1;
    int num2;
    int count = 0;
    int temp;
    int j;
    
    for(int i = 101; i <= n; i++) {
        j = 0;
        temp = i;
        while(temp) {
            s[j] = temp % 10;
            temp = temp / 10;
            j++;
        }
        if(s[0] == s[1] || s[0] == s[2] || s[1] == s[2]) {
            num1 = sqrt((double)i);
            num2 = sqrt((double)i);
            if(num1 == num2) {
                count++;
            }
        }
    }
    return count;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值