判断满足条件的三位数
本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。
函数接口定义:
int search( int n );
其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。
思路1:从101逐个增加判断是否为完全平方数,在取出个位十位百位比较,是否有相同的两个数字,计数器加1。
int search( int n )
{
int num = 0; //计数器
int unit, decade, hunderds; //个位十位百位
int count; //记下该数的平方根
for(int i = 101; i < n; i++){
unit = i % 10;
decade = (i % 100) / 10;
hunderds = i / 100;
count = sqrt(i);
if(i == count * count){ //在开平方判断是否为原数
if(unit == decade || unit == hunderds || hunderds == decade)
num++; //复合条件后++
}
}
return num;
}
思路2:可将101到n范围的所有完全平方数存入数组中,在逐个判断数组中的数是否有两个相同的数字。
int search( int n )
{
int nums[100]; //完全平方数组
int unit, decade, hunderds; //个位十位百位
int num = 0; //计数器
int count = 0; //数组下标
//创建完全平方数组,从最小的三位完全平方数(100除外)
for(int i = 11; i <= sqrt(n); i++){
nums[count] = i * i;
count++;
}
//将数组中的每个数与n比较,且满足两个数字相同
for(int i = 0; i < count; i++){
unit = nums[i] % 10;
decade = (nums[i] % 100) / 10;
hunderds = nums[i] / 100;
if(nums[i] <= n){
if(unit == decade || unit == hunderds || hunderds == decade)
num++;
}
}
return num;
}