NOI OpenJudge 1943 满足条件的整数

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值