魔法数
成绩: 5 / 折扣: 0.8
大贤者福尔最近迷上了数学,他研究发现有些神奇的数似乎具有某种魔力。于是他开始研究自然数,发现某个范围内的一些数,经过一定规则运算后的和,等于另一个数按同样规则计算后的值。具体来说,给定不大于NN的整数a, b, c, d (1 \le a \le b \le c \le d \le N)a,b,c,d(1≤a≤b≤c≤d≤N),可能存在关系a^x+b^x+c^x=d^xax+bx+cx=dx。
福尔想知道在给定的范围NN中,有多少数能够满足这种关系?
输入
输入数据有若干行,每行包括两个整数x, N,(2 \le x \le 3, 1 \le N \le 100x,N,(2≤x≤3,1≤N≤100。
输出
对每组测试数据,先输出样例编号Case c:
,c
为当前测试样例的组号,从1开始。随后按照a, b, ca,b,c的自然序依次输出结果。若不存在满足条件的数,则输出No such numbers.
。
示例输入
3 4
3 6
示例输出
Case 1: No such numbers.
Case 2: 3^3+4^3+5^3=6^3
数据不是很大,n=100;所以可以直接用枚举的办法解决这道题;
因为a,b,c,d之间是有数量关系的,所以:
用三层循环就可以解决问题;博主试了一下四层,也是可以通过的,实在不行就改成三层循环;
#include <iostream>
using namespace std;
int main() {
int x,n,flag = 1,cnt=1;
while (cin >> x >> n) {
flag = 1; //判断数据内由无符合条件的标记;
printf("Case %d:\n",cnt);
for (int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
for (int m = k ; m <=n; m++) {
//x=2的情况
if (i * i + j * j + k * k == m * m &&x==2) {
printf("%d^2+%d^2+%d^2=%d^2\n",i, j, k, m);
flag = 0; break;
}
//x=3的情况
else if ((i * i * i + j * j * j + k * k * k == m * m * m && x == 3)) {
printf("%d^3+%d^3+%d^3=%d^3\n", i, j, k, m);
flag = 0; break;
}
}
if (flag) //没有符合条件的数据
printf("No such numbers.\n");
cnt++;
}
}