1943:满足条件的整数
描述
假设a、b、c均为整数,且满足a,b,c 大于1,并且小于等于100,找出所有符合条件:“a2+ b2= c2”的整数组。
输入
无。
输出
按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行一组,每一组数据的输出样式为:
a*a + b*b = c*c
注意
1)为避免重复输出,要求a<=b;
2)加号和等号左右各有一个空格,除此之外无多余空格。
分析
条件:三个数都大于1,不大于100,别傻乎乎的像我一样只看到了a,b <= 100
注意a,b,c的大小顺序,a最小,b其次,c最大
还有排序方式表明在遍历时需要a为最外层循环
话不多数,直接上代码
暴力枚举法
/*
* Author: Jeefy Fu
* Email: jeefy163@163.com
* Description:
* Origin URL: http://noi.openjudge.cn/ch0201/1943/
*/
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <vector>
#include <array>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
for (int a = 2; a <= 100; a++)
for (int b = a; b <= 100; b++)
for (int c = b; c <= 100; c++)
if (a*a + b*b == c*c) printf("%d*%d + %d*%d = %d*%d\n", a, a, b, b, c, c);
return 0;
}
合理使用内置函数减少时间法
/*
* Author: Jeefy Fu
* Email: jeefy163@163.com
* Description:
* Origin URL: http://noi.openjudge.cn/ch0201/1943/
*/
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <vector>
#include <array>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int isvalid(int a, int b) {
int ab = a*a + b*b;
int c = (int)sqrt((double)ab);
if (c <= 100 && c * c == ab)
return c;
return 0;
}
int main() {
for (int a = 2; a <= 100; a++) {
for (int b = a; b <= 100; b++) {
int c = 0;
if ((c = isvalid(a, b))) {
printf("%d*%d + %d*%d = %d*%d\n", a, a, b, b, c, c);
}
}
}
return 0;
}