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
我的代码及注释:
- // 判断是否为完全平方数
- int is1(int n)
- {
- if((sqrt(n)-(int)sqrt(n))==0)return 1;//sqrt(n) 为 c 语言中开平方的函数, 此函数的返回值是 double 型
- else return 0;
- }
- // 判断是否有两位数字相同
- int is2(int n)
- {
- int len=0;
- len=(int)log10(n)+1;// 利用 c 语言中 10 的对数加 1 来计算整数的数位
- int a[len];// 定义一个适当长度的数组, 用来存放整数的各位数位
- int i;
- for(i=0;i<len;i++)
- {
- a[i]=n%10;// 为数组赋值
- n=n/10;
- }
- int p,q;// 判断数组中是否存在至少两个相同的数字
- int sign=0;
- for(p=0;p<len;p++)
- {
- for(q=p+1;q<len;q++)
- {
- if(a[p]==a[q])
- {
- sign=1;break;// 若数组中有两个相同的数字, 则更改 sign 的值, 并中断循环
- }
- }
- }
- if(sign==0)return 0;
- else return 1;
- }
- int IsTheNumber ( const int N )
- {
- if(is1(N) && is2(N))// 判断条件
- return 1;
- }
来源: https://www.cnblogs.com/3111-Tomorrow/p/12241545.html