文章目录
- 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
一.分析题干:
- 已知:任意整数且为int型;使用#include预处理命令;
- 条件:输入整数必须为平方数且至少有两位数字相同;
- 可能利用到的知识:
对于int型数据,占四个字节,所以最大值为2^ 32 -1 =4 294 967 295 (共十位数字);
要求是平方数,那么可以使用math库中的sqrt( 因数=sqrt(输入的整数 ) 函数;
题干要求至少有两位数字相同,可能会利用到除法或者求余数;
二.解决方案:
- 要求是平方数,那么可以使用math库中的sqrt( 因数=sqrt(输入的整数 ) 去获取;
int m=sqrt(n);
- 题干要求至少有两位数字相同,那么我们可以想办法获取输入整数的每一位, 然后试图去比较或者采用其他办法;
这里我们利用循环,从右到左获取数字的每一位,所获取的数字为(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);否则会报错!!!