Algorithm 当一个边给定时,找到一个试验的另两个边的算法
有一个三角形,它的斜边长度是给我们的。现在我们的任务是找出其他两边是否也是整数 对于上面的问题,我构建了一个代码,但这是低效的,您能为同样的问题建议任何有效的算法吗 我的工作Algorithm 当一个边给定时,找到一个试验的另两个边的算法,algorithm,geometry,discrete-mathematics,Algorithm,Geometry,Discrete Mathematics,有一个三角形,它的斜边长度是给我们的。现在我们的任务是找出其他两边是否也是整数 对于上面的问题,我构建了一个代码,但这是低效的,您能为同样的问题建议任何有效的算法吗 我的工作 #include<stdio.h> #include<cmath> using namespace std; int isInt(double x) { if( (x - (int)x) == 0 ) return 1; return 0; } main() { int
#include<stdio.h>
#include<cmath>
using namespace std;
int isInt(double x) {
if( (x - (int)x) == 0 ) return 1;
return 0;
}
main() {
int S;
int flag = 0;
scanf("%d", &S);
flag = 0;
for(int i = 1; i < S; i++) {
if( isInt(sqrt(S*S - i*i)) ) {
printf("EXIST\n");
flag = 1;
break;
}
}
if(!flag) printf("NOT EXIST\n");
return 0;
}
#包括
#包括
使用名称空间std;
int isInt(双x){
如果((x-(int)x)==0)返回1;
返回0;
}
main(){
int-S;
int标志=0;
scanf(“%d”和“&S”);
flag=0;
对于(int i=1;i
如果我理解正确,您是在试图回答“是否存在一个带有假设S的整数大小的直角三角形?”
立即改进您的方法:
- 循环i从1到S/2,而不是从1到S-1。
- 实际上,S/2本身也不是必需的,因为这意味着a==b,因此c必须包含奇数个sqrt(2)-因子
- (无需两次设置flag=0。)
int check(int c){
int a=1;
int b=c-1;
int cc=c*c;
while(a<b){
int sum=a*a+b*b;
if(sum==cc) return true;
if(sum<cc){
a++;
}else{
b--;
}
}
return false;
}
int检查(int c){
INTA=1;
int b=c-1;
int cc=c*c;
而