pta 6-7 统计某类完全平方数 (20分)
- 6-7 统计某类完全平方数 (20分)
本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。- 函数接口定义:
- int IsTheNumber ( const int N );
- 其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
- 裁判测试程序样例:
- #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;
- }
- /* 你的代码将被嵌在这里 */
- 输入样例:
- 105 500
- 输出样例:
- cnt = 6
我的代码及注释:
- 1 //判断是否为完全平方数
- 2 int is1(int n)
- 3 {
- 4 if((sqrt(n)-(int)sqrt(n))==0)return 1;//sqrt(n)为c语言中开平方的函数,此函数的返回值是double型
- 5 else return 0;
- 6 }
- 7 //判断是否有两位数字相同
- 8 int is2(int n)
- 9 {
- 10 int len=0;
- 11 len=(int)log10(n)+1;//利用c语言中10的对数加1来计算整数的数位
- 12 int a[len];//定义一个适当长度的数组,用来存放整数的各位数位
- 13 int i;
- 14 for(i=0;i<len;i++)
- 15 {
- 16 a[i]=n%10;//为数组赋值
- 17 n=n/10;
- 18 }
- 19 int p,q;//判断数组中是否存在至少两个相同的数字
- 20 int sign=0;
- 21 for(p=0;p<len;p++)
- 22 {
- 23 for(q=p+1;q<len;q++)
- 24 {
- 25 if(a[p]==a[q])
- 26 {
- 27 sign=1;break;//若数组中有两个相同的数字,则更改sign的值,并中断循环
- 28 }
- 29 }
- 30 }
- 31 if(sign==0)return 0;
- 32 else return 1;
- 33 }
- 34
- 35
- 36 int IsTheNumber ( const int N )
- 37 {
- 38 if(is1(N) && is2(N))//判断条件
- 39 return 1;
- 40 }