链接:
https://www.nowcoder.com/acm/contest/110/B
来源:牛客网
来源:牛客网
为了让所有选手都感到开心,Nowcoder练习赛总会包含一些非常基本的问题。 比如说:
按顺时针或逆时针方向给你一个简单的多边形的顶点坐标,请回答此多边形是顺时针还是逆时针。
输入描述:
输入包含N + 1行。 第一行包含一个整数N,表示简单多边形的顶点数。 在下面的N行中,第i行包含两个整数xi,yi,表示简单多边形中的第i个顶点的坐标。
输出描述:
如果简单多边形按顺时针顺序给出,则在一行中输出“clockwise”(不带引号)。 否则,打印"counterclockwise''(不带引号)。
示例1
输入
3 0 0 1 0 0 1
输出
counterclockwise
示例2
输入
3 0 0 0 1 1 0
输出
clockwise
备注:
3≤N≤30 -1000≤xi,yi≤1000 数据保证,这个简单多边形的面积不为零。简单多边形的判断,对于凸多边形而言,只需对某一个点计算
(x[i] - x[a]) * (y[b] - y[i]) - (y[i] - y[a]) * (x[b] - x[i])
如果上式的值为正,逆时针;为负则是顺时针
而对于凹多边形,则需对于多边形的每一个点计算上述值,如果正值比较多,是逆时针;负值较多则为顺时针。
#include<stdio.h> #define N 120 int main() { int ans,n,x[N],y[N],i,h,d,a,b; while(scanf("%d",&n)!=EOF) { h=0;d=0; for(i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); for(i=0;i<n;i++) { if(i==0) { a=n-1; b=i+1; } else if(i==n-1) { a=i-1; b=0; } else { a=i-1; b=i+1; } ans = (x[i] - x[a]) * (y[b] - y[i]) - (y[i] - y[a]) * (x[b] - x[i]); if(ans>0) h++; else d++; } if(h<d) printf("clockwise\n"); else printf("counterclockwise\n"); } return 0; }