文章
10
粉丝
66
获赞
3
访问
45.3k
解析:
题目大意:对于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 () {
...
登录后发布评论
暂无评论,来抢沙发