C语言/判断多个给定的点是否在同一直线上
本人刚学到数组,想不到这题有什么简便的解法,我能想到的流程都是很冗长的。题目:给出n个点的坐标,判断这些点是否在同一条水平或竖直的直线上?
输入:第一行输入点的个数n,后面几行每行一组点的坐标(x,y)
输出:若所给的点在同一条水平或竖直的直线上,输出1;否则输出0
范例:输入:5
1 3
2 3
5 3
7 3
9 3
输出:1
烦请各位大佬帮我下,谢谢{:5_102:} 本帖最后由 ba21 于 2022-7-24 20:49 编辑
使用数组则通常先分配一个足够大的数组。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int len, i, result;
int points={0};
scanf("%d", &len);
for(i=0; i<len*2; i+=2)
{
scanf("%d %d", &points, &points);
}
result = 1;
for(i=1; i<len*2; i+=2)
{
if(points!= points)
{
result = 0;
break;
}
}
printf("%d\n", result);
return 0;
} ba21 发表于 2022-7-24 20:45
使用数组则通常先分配一个足够大的数组。
感谢您的回答!我已经有所启发,但对于您的代码有一点不理解:
1.为什么只有判断纵坐标是否相等的程序?
2.我试着用您的代码做了实验,发现总是输出0,如下:
3
1 3
2 3
3 3
0
--------------------------------
Process exited after 15.55 seconds with return value 0
请按任意键继续. . .
我认为按这个代码,应该是输出1,但看不出问题所在,求点拨,谢谢!{:5_102:} 下面是我仿照您的代码写出的改进版。
#include <stdio.h>
int main()
{
printf("请输入点的总数:");
int n;
bool IsLine=1;
scanf("%d",&n);
printf("请输入各点坐标(每行1组,有空格):");
int x,y;
for(int count=0;count<n;count++)
{
scanf("%d %d",&x,&y);
}
for(int a=0;a<n-1;a++)
{
if(x!=x)
{
for(int b=0;b<n-1;b++)
{
if(y!=y)
IsLine=0;
}
}
}
if(IsLine==0)
printf("他们不在同一直线上!\n");
else
printf("他们在同一直线上!\n");
return 0;
} 额外减小 发表于 2022-7-24 23:09
感谢您的回答!我已经有所启发,但对于您的代码有一点不理解:
1.为什么只有判断纵坐标是否相等的程序? ...
都是简单问题 自己思考下就解决了。
你是来学习的,代码永远只是供参考。
for(i=1; i<len*2-2; i+=2) // 减1个 点 ba21 发表于 2022-7-25 00:17
都是简单问题 自己思考下就解决了。
你是来学习的,代码永远只是供参考。
for(i=1; i
谢谢!{:5_102:}
页:
[1]