最佳直线(oj题)
2024-01-03 09:55:41
期末考终于结束了,寒假的第一天,先回顾一下我的程设期末考吧
拉了,变菜了
有点难受,第三题被拖了一个多小时,导致最后一题根本没时间做
上面就是第三题
至于原因嘛,我感觉是因为我完全没有打草稿,想到什么写什么,对于一些不用动脑子的题就可以很快写出来了,对于这种数学题,还要防备可能出现的情况,比如除数为零啥的
以后得养成做题的时候打草稿的习惯了
代码如下:
#include <stdio.h>
#include <math.h>
int getnum(int a, int b);
struct martix {
int x;
int y;
} map[300];
int N, maxn, S0 = 300, S1 = 300;
int main(void) {
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d%d", &map[i].x, &map[i].y);
for (int i = 0; i < N - 1; i++)
for (int j = i + 1; j < N; j++) {
int len = 2;
int k_x = map[j].x - map[i].x;
int k_y = map[j].y - map[i].y;
int tmp = getnum(k_x, k_y);
if (!k_x && !k_y)
;
else if (!k_x)
k_y = 1;
else if (!k_y)
k_x = 1;
k_x /= tmp, k_y /= tmp;
for (int k = j + 1; k < N; k++) {
int tmp_x = map[k].x - map[i].x;
int tmp_y = map[k].y - map[i].y;
tmp = getnum(tmp_x, tmp_y);
if (!tmp_x && !tmp_y)
;
else if (!tmp_x)
tmp_y = 1;
else if (!k_y)
tmp_x = 1;
tmp_x /= tmp, tmp_y /= tmp;
if (tmp_x == k_x && tmp_y == k_y) {
len++;
continue;
}
tmp_x *= -1, tmp_y *= -1;
if (tmp_x == k_x && tmp_y == k_y) {
len++;
continue;
}
}
if (maxn < len) {
maxn = len;
S0 = i;
S1 = j;
}
}
printf("%d %d", S0, S1);
return 0;
}
int getnum(int a, int b) {
if (!a || !b)
return 1;
int n = 1;
a = abs(a), b = abs(b);
for (int i = (a < b) ? a : b; i >= 1; i--)
if (a % i == 0 && b % i == 0) {
n = i;
break;
}
return n;
}
话说,dev-C++这个b会自动把我的格式改掉,有点烦
文章来源:https://blog.csdn.net/Fool256353/article/details/135354044
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!