首页 > 试题广场 >

编写一个函数,利用参数传入一个3位数n,找出101~n间所有

[问答题]

编写一个函数,利用参数传入一个3位数n,找出101~n间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。试编写相应程序。

推荐
#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;
}

发表于 2018-05-06 21:42:54 回复(0)
#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;
}

发表于 2022-02-27 16:35:48 回复(0)