本文主要是介绍变异的勾股定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设直角三角形的两条直角边长度分别是 和a,b斜边长度是c,那么可以用数学语言表达:a2+b2=c2,这就是勾股定理,但是在本题中, 勾股定理它!变!异!了!,若三个数满足a2+b2=c,那么称该数满足变异的勾股定理, 现在给定一个数c,如果存在两个数a与b满足a2+b2=c,那么输出Yes
,否则输出No
.
数据范围:
c<=231−1
输入格式:
输入一个整数c
输出格式:
输出Yes
或No
输入样例1:
5
输出样例1:
在这里给出相应的输出。例如:
Yes
输入样例2:
2147483647
输出样例2:
在这里给出相应的输出。例如:
AC代码:
看的大佬的方法,通过枚举i,在mp数组里查找一个mp[j],满足mp[j]=num-mp[i],开个数组的话实现不了因为数据范围大,这里用了unordered_map存储对应的bool值,map也行,只不过不要求排序的话map效率更低
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,bool> mp;
bool solve(int num){int i = 0;for(i = 0;(long long)i*i <= num;i++)mp[i*i] = true;for(i = 0;(long long)i*i <= num;i++){if(mp[num-i*i])return true;}return false;
}
int main(){int num;cin >> num;(solve(num)==true) ? cout << "Yes" : cout << "No";
}
这篇关于变异的勾股定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!