文章

10

粉丝

66

获赞

3

访问

45.3k

头像
Square Friends题解
P991 浙江大学2021年机试题
发布于2022年5月22日 12:36
阅读数 4.8k

解析:

题目大意:对于n,A,B,使得B2去掉末三位数字等于A,(B+1)2去掉末三位数字等于A+1,以此类推,(B+n-1)2去掉末三位数字等于A+n-1,现在给定n和A的上限MaxA,求所有满足条件的A与B,按照A升序(第一判断标准)且B升序(第二判断标准)输出。如果无解,输出No Solution.。

双重循环,外层遍历A,范围为[1, MaxA],内层遍历B,范围为[A*1000再开方, (A+1)*1000再开方]。对每对A与B,检查n个连续的数字是否满足要求。

#include <cmath>
#include <iostream>
using namespace std;

int n;

bool check (int A, int B) {
    for (int i = 0; i < n; i++) {
        if (B * B / 1000 != A) return false;
        A++;
        B++;
    }
    return true;
}

void test () {
    int MaxA, i, j, flag = 0;
    scanf("%d %d", &n, &MaxA);
    for (i = 1; i <= MaxA; i++) {
        int B1 = (int)sqrt(i * 1000);
        int B2 = (int)sqrt((i+1) * 1000);
        for (j = B1; j <= B2; j++) {
            if (check(i, j)) {
                flag = 1;  // 有输出了
                printf("%d %d\n", i, j);
            };
        }
    }
    if (flag == 0) {
        printf("No Solution.");
        return;
    }
}

int main () {
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发