本文旨在讲解统计某类完全平方数例题!
在进行结题之前首先得了解什么是完全平方数!
完全平方数的定义是:如果一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。
下面来看一下本例题的题目以及要求!
函数接口定义:
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
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
下面根据题目要求来写出函数的实现!
int IsTheNumber(const int N)
{
int n = N;
int arr[10] = { 0 }; //arr数组用来统计一个数的次数!
//int s = sqrt(N); if(s*s==N) 利用sqrt来判断一个数是否为完全平方数!
for (int i = 1; i < n; i++)//进行循环判断该数符合完全平方数的定义
{
if (pow(i, 2) == n) //i为完全平方数!
{
while (n)
{
{
arr[n % 10]++; //arr[i],i表示余数,如果出现相同余数的情况下,该地址的元素则会进行+1操作
n/= 10;
}
}
}
}
for (int i = 0; i < 10; i++) //因为余数的取值为0~9,循环结束为i<10!
{
if (arr[i] > 1) //只要满足数组中的元素大于1,即可以判断出现相同的余数啦!
{
return 1;
}
}
return 0;
}
解决本题的思路可以简单分为两大步!
一、首先先判断一个数是否是完全平方数 !
二、再进行判断是否有两个相同的数字!
判断一个数是否为完全平方数可以利用math.h函数!因为例题中主函数也引用了math.h函数,所以我们可以直接在函数中使用这个函数!
math.h函数中的pow可以求出一个数的完全平方数,只需将pow(m,n),中的n赋值为0,进行for循环就可以求出其完全平方数啦!
也可以利用math.h库函数中的sqrt函数直接判断是否存在完全平方数!下面是sqrt函数的使用方式!
double sqrt(double x);
作用:
sqrt() 用来求给定值的平方根
判断一个数是否为完全平方数后,就可以判断是否存在两个相同的数字啦!
可以创建一个大小为10的整形数组,用来存储余数!一开始初始化全部为0,数组下标即为余数!arr[i],当一开给定的数字N不为0时,一直进行模10除10操作!只要循环不停止一直进行arr[N%10]++;
当数字N的每位数字都求出来以后,最后再进行遍历数组!若数组中的元素存在>1的情况下,则可以证明存在至少有两位数字相同!
好啦,今日分享到此为止!如果还有不懂的小伙伴们可以在评论区留言哦!