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


1.函数接口定义:

int IsTheNumber ( const int N );

其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。

2.裁判测试程序样例:


```c
#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;
}
 
/* 你的代码将被嵌在这里 */

3. 输入样例:

105 500

4.输出样例:

cnt = 6

5.代码如下:

自定义函数:

int IsTheNumber ( const int N ){
  int n=N;
  int b;
  int number[10]={0};
  int m=sqrt(n);
  if(m*m==n){
    while(n){
      b=n%10;
      number[b]++;
      n/=10;
    }
    for(int i=0;i<=9;i++){
      if(number[i]>1)
      return 1;
    }
  }
  return 0;
}

6.具体分析过程:

提示:以上题来自PTA题库:https://pintia.cn/problem-sets/14/problems/739

一.分析题干:

  1. 已知:任意整数且为int型;使用#include<math.h>预处理命令;
  2. 条件:输入整数必须为平方数且至少有两位数字相同;
  3. 可能利用到的知识:
    对于int型数据,占四个字节,所以最大值为2^ 32 -1 =4 294 967 295 (共十位数字);
    要求是平方数,那么可以使用math库中的sqrt( 因数=sqrt(输入的整数 ) 函数;
    题干要求至少有两位数字相同,可能会利用到除法或者求余数;

二.解决方案:

  1. 要求是平方数,那么可以使用math库中的sqrt( 因数=sqrt(输入的整数 ) 去获取;
 int m=sqrt(n);
  1. 题干要求至少有两位数字相同,那么我们可以想办法获取输入整数的每一位, 然后试图去比较或者采用其他办法;
    这里我们利用循环,从右到左获取数字的每一位,所获取的数字为(1 2 3 4 5 6 7 8 9 0)任意一个,我们将所获取的数当作数组的下标,并将其所在数组的位置加一,这样通过循环就会获取数组中每个数的个数:
    例如676: 循环后number【6】=2;number【7】=1;
  while(n){
      b=n%10;
      number[b]++;
      n/=10;
    }

然后利用下面的循环可获取是否自少有两位数字相同。

  for(int i=0;i<=9;i++){
      if(number[i]>1)
      return 1;
    }
  }
  return 0;

最后要注意:
1:必须要重新定义一个整型数 int n;然后把参数N赋给变量(这里是n);否则会报错!!!

  • 34
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
判断一个整数n是否满足条件:既是完全平方数,又至少整数平方根,可以通过以下方式实现函数: 首先,判断n是否完全平方数。可以使用二分法来查找n的平方根。 定义变量left为1,变量right为n,循环查找直到left大于right为止。 在每一次循环中,计算中间值mid = (left + right) // 2,并计算mid的平方。 如果mid的平方等于n,则说明n是完全平方数,返回True。 如果mid的平方小于n,则更新left为mid + 1。 如果mid的平方大于n,则更新right为mid - 1。 如果循环结束都没有找到完全平方数,则返回False。 接下来,判断n是否至少整数平方根。 定义count为0,用于记录整数平方根的个数。 从1到n的平方根进行循环,如果某个整数的平方等于n,则count加1。 最后,如果count大于等于2,则返回True,否则返回False。 整个函数实现如下: ```python import math def check_number(n): # 判断n是否完全平方数 left = 1 right = n while left <= right: mid = (left + right) // 2 square = mid * mid if square == n: return True elif square < n: left = mid + 1 else: right = mid - 1 # 判断n是否至少整数平方根 count = 0 for i in range(1, math.isqrt(n) + 1): if i * i == n: count += 1 if count >= 2: return True else: return False ``` 使用该函数可以判断任意给定整数n是否满足条件。例如,调用函数`check_number(25)`将返回True,因为25是一个完全平方数,并且有整数平方根:5和-5。调用函数`check_number(16)`将返回False,因为16是一个完全平方数,但只有一个整数平方根:4。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值