文章目录

  • 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);否则会报错!!!