编写一个函数,利用参数传入一个3位数n,找出101~n间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。试编写相应程序。
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
bool same2(int n);
int find_num(int n);
int main(void)
{
int n;
printf("input n: ");
scanf("%d",&n);
printf("%d numbers\n",find_num(n));
return 0;
}
/** 找到符合题目要求的整数 **/
int find_num(int n)
{
int count=0,i;
for(i=101;i<=n;i++){
if(same2(i)&&(( sqrt(i)-(int)(sqrt(i)) ) ==0))
count++;
}
return count;
}
/** 判断一个整数是否有两位数相同 */
bool same2(int n)
{
int sign[10],i; //设置一个标志数组,统计出现的数字的次数
bool flag = false;
for(i=0;i<10;i++)
sign[i] = 0;
for(i=0;i<3;i++){
sign[n%10]++; //如果n中出现了某一数字对应符号++
n /= 10;
}
for(i=0;i<10;i++){
if(sign[i] == 2)
flag = true; //n有出现了两次的数字
}
return flag;
}
#include <stdio.h> #include <math.h> int fun(int n); int main(void) { int n; printf("input n: "); scanf("%d", &n); printf("total=%d\n", fun(n)); return 0; } int fun(int n) { int i, d=0; for(i=101; i<=n; i++) if(((int)sqrt(i) * (int)sqrt(i)) == i) { if (i/100==(i/10)%10|| i/100==i%10||(i/10)%10==i%10) d++; } return d; }