gpt4 book ai didi

Codechef 和直角三角形的斜率法

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:45 26 4
gpt4 key购买 nike

https://www.codechef.com/problems/RIGHTRI

毕达哥拉斯定理问题非常简单,但是当我使用斜率法做同样的事情时,我无法找出可能有什么问题。以下是我的代码:

#include<stdio.h>
int main()
{
int N,count=0;
double m1,m2,m3,x1,x2,x3,y1,y2,y3;
scanf("%d",&N);
while(N--){
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
if(x1==x2||x2==x3||x3==x1){
if(y1==y2||y2==y3||y3==y1)
count++;
}
else{
//printf("hello");
m1=((y1-y2)*(y3-y2))/((x1-x2)*(x3-x2));
m2=((y1-y2)*(y1-y3))/((x1-x2)*(x1-x3));
m3=((y3-y2)*(y1-y3))/((x3-x2)*(x1-x3));
// printf("%lf %lf %lf\n",m1,m2,m3);
if((m1==(-1.000000))||(m2==(-1.000000))||(m3==(-1.000000)))
count++;
}
}
printf("%d\n",count);
return 0;
}

新代码

#include<stdio.h>
int main()
{
int N,count=0;
int m1N,m1D,m2N,m2D,m3N,m3D,x1,x2,x3,y1,y2,y3;
scanf("%d",&N);
while(N--){
scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
if(x1==x2||x2==x3||x3==x1){
if(y1==y2||y2==y3||y3==y1)
count++;
}
else{
m1N=((y1-y2)*(y3-y2));
m1D=((x1-x2)*(x3-x2));
m2N=((y1-y2)*(y1-y3));
m2D=((x1-x2)*(x1-x3));
m3N=((y3-y2)*(y1-y3));
m3D=((x3-x2)*(x1-x3));
if((m1N==-m1D)||(m2N==-m2D)||(m3N==-m3D))
count++;
}
}
printf("%d\n",count);
return 0;
}

最佳答案

您的问题是您在 while 循环开始处设置的 if 条件,用于检查是否有任何坐标具有相同的值。

如果任何 2 个点共享公共(public) x 坐标,则不一定也必须共享相同的 y 坐标以形成直角三角形,您似乎在代码中假设了这一点。示例采用这些坐标::

(0, 0), (0, 5), (2.5, 2.5)

(我知道问题陈述只说了整数值,但这是我想到的最简单的情况,而且我相信您可以仅使用整数值来构建这样的测试用例。)

如果我们遵循,则您的代码 x1 = x2 但是,没有相同的 y 值并且您的代码不会将其视为直角三角形,尽管它是直角三角形。

因此,最简单的解决方案是删除第一个 if 条件,让其余代码运行,您将获得 AC。

编辑::

整数坐标示例::

(0, 0), (0, 6), (3, 3)

关于Codechef 和直角三角形的斜率法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com