题目链接:http://115.28.203.224/problem.php?cid=1010&pid=16
题目描述
3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数
输入
输出
满足题意的数全部四位数(从小到大输出,且数之间用两个空格分开)
样例输出
2025 3025 9801
提示
根据题意可以采用穷举法,对所有四位数进行判断,从而筛选出符合这种性质的四位数。具体算法实现,可任取一个四位数,将其截为两部分,前两位为a,后两位为b,然后套用公式计算并判断。
代码
#include <iostream>
using namespace std;
int main() {
// i是计数器,控制输出空格的个数
int i = 0;
/*
穷举法,举例:
a=20;20<100;
b=25<100;
20*100+25 == (20+25)*(20+25);
输出2025;
i自增 i=1;
输出空格
b自增 b=26
a自增 a=21
a=21;21<100;
......
*/
for (int a = 10; a < 100; a++) {
for (int b = 0; b < 100; b++) {
if ((a * 100 + b) == (a + b) * (a + b)) {
cout << a * 100 + b;
// 计数器增加
i++;
// 在第一个数与第二个数,第二个数与第三个数之间加空格分开,末尾没有空格输出
if (i < 3) {
cout << " ";
}
}
}
}
}