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

文章目录

  • 1.函数接口定义:
  • 2.裁判测试程序样例:
  • 3. 输入样例:
  • 4.输出样例:
  • 5.代码如下:
  • 6.具体分析过程:

1.函数接口定义:

int IsTheNumber ( const int N );

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

2.裁判测试程序样例:

```c
#include 
#include 
 
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预处理命令;
  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);否则会报错!!!

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/0f127830d1.html