王小二° 发表于 2023-12-3 15:28:35

这题怎么解决

任务描述
一个整数N,它加上A后是一个完全平方数,它加上B又是一个完全平方数,请问该数是多少?
输入格式:
有若干组A和B的数据,每组数据占一行,数之间以空格分隔。
输出格式:
对于每组数据,在区间内输出满足条件的最小的N,如果没有则输出Not found!。
每个输出占一行。
输入样例:
2 7
20 41
100 101
100 268
输出样例:
2
80
Not found!
21
用C语言和数组写,越简单越好,谢谢

小甲鱼的二师兄 发表于 2023-12-3 15:28:36

#include <stdio.h>
#include <math.h>

// 检查一个数是否是完全平方数
int isPerfectSquare(int num) {
    int root = (int)sqrt(num);
    return root * root == num;
}

int main() {
    int A, B;
   
    // 读取输入直到遇到文件结束符
    while (scanf("%d %d", &A, &B) != EOF) {
      int found = 0;

      // 检查每一个可能的N值
      for (int N = 1; N <= 10000; ++N) {
            if (isPerfectSquare(N + A) && isPerfectSquare(N + B)) {
                printf("%d\n", N);
                found = 1;
                break;
            }
      }

      if (!found) {
            printf("Not found!\n");
      }
    }

    return 0;
}

FishC_GPT 发表于 2023-12-3 15:32:01

在C语言中,可以使用循环遍历的方式来解决这个问题。首先,需要导入math.h头文件,以便使用 sqrt 函数来计算完全平方数。然后,可以定义一个函数来判断给定的数是否是完全平方数。

下面是一个简单的实现代码:

#include <stdio.h>
#include <math.h>

int isPerfectSquare(int num) {
    int squareRoot = sqrt(num);
    return squareRoot * squareRoot == num;
}

int main() {
    int A, B;
   
    while (scanf("%d %d", &A, &B) != EOF) {
      int N = 1; // 假设N的最小值为1
      
      while (1) {
            if (isPerfectSquare(N + A) && isPerfectSquare(N + B)) {
                printf("%d\n", N);
                break;
            }
            
            N++;
            
            // 如果N的值已经超过了1000000,则说明没有找到满足条件的N
            if (N > 1000000) {
                printf("Not found!\n");
                break;
            }
      }
    }
   
    return 0;
}

这个代码中,首先定义了一个 `isPerfectSquare` 函数,用于判断给定的数是否是完全平方数。然后,在主函数中,使用循环读取用户输入的 A 和 B 的值,并通过循环逐步增加 N 的值,检查每个 N 是否满足要求。如果找到满足条件的 N,则输出结果并跳出循环;如果没有找到,则输出 "Not found!"。

请注意,上述代码中的循环次数限定为1000000次,如果题目中给定的 A 和 B 的值较大,可能需要进行调整。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

王小二° 发表于 2023-12-3 21:20:47

小甲鱼的二师兄 发表于 2023-12-3 18:46


int isPerfectSquare(int num) {
    int root = (int)sqrt(num);
    return root * root == num;
}
这个可以再讲讲吗
页: [1]
查看完整版本: 这题怎么解决