浙江工商大学21加试(oj复试)正反画画

正反画画

题目描述
如果在一个二维平面xOy中,有三个不同的点A(x1,y1),B(x2,y2),C(x3,y3),根据这三个点的顺序进行画圆,想象一下,从A点开始画圆,穿过B点,再穿过C点,最后回到A点完成画圆,问判断出这样是按顺时针画圆还是按逆时针画圆。
输入格式
第一行包含一个整数T(1≤ T ≤ 1000),表示测试用例的数量。
在接下来的T行中,每一行包含6个用空格分隔的整数x1、y1、x2、y2、x3、y3(-1000 ≤ x1、y1、x2、y2、x3、y3 ≤ 1000)。
保证A、B、C三个点各不相同。
输出格式
对于每个测试用例,若结果为顺时针,则输出“Clockwise”,若结果为逆时针,则输出“Counterclockwise”(不用输出引号)。
样例输入

3
1 2 2 1 -1 -2
4 3 -4 3 3 4
4 -3 4 3 3 4

样例输出

Clockwise
Clockwise
Counterclockwise
思路:

主要还是找规律,直接if else就能写出来,但是自己在写的时候一开始没有用doule,或者说部分用了double,不是所有的地方用了double,导致有一个问题就是虽然用了double k,但是用来计算的x1,x2,y1,y2但是int类型,计算出来的结果还是int。

#include<bits/stdc++.h>
using namespace std;
main(){
	double t;
	cin>>t;
	while(t--){
		double x1,y1,x2,y2,x3,y3;
		cin>>x1>>y1>>x2>>y2>>x3>>y3;
		if(y1==y2){
			if(x1>x2){
				if(y3<y1){
					cout<<"Counterclockwise"<<endl;
				}else{
					cout<<"Clockwise"<<endl;
				}
			}else{
				if(y3<y1){
					cout<<"Clockwise"<<endl;
				}else{
					cout<<"Counterclockwise"<<endl;
				}
			}
		}else if(x1==x2){
			if(y2>y1){
				if(x3<x1){
					cout<<"Counterclockwise"<<endl;
				}else{
					cout<<"Clockwise"<<endl;
				}
			}else{
				if(x3<x1){
					cout<<"Clockwise"<<endl;
				}else{
					cout<<"Counterclockwise"<<endl;
				}
			}
		}else{
			double k=(y2-y1)/(x2-x1);
			double y=k*(x3-x1)+y1;

		 	if((x2>x1&&y2>y1)){
		 		if(y3>y){
		 			//逆 
		 			cout<<"Counterclockwise"<<endl;
				 }else{
				 	//顺 
				 	cout<<"Clockwise"<<endl;
				 } 
			 }else if(x2>x1&&y1>y2){
			 	if(y3>y){
			 		//逆 
			 		cout<<"Counterclockwise"<<endl;
				 }else{
				 	//顺 
				 	cout<<"Clockwise"<<endl;
				 } 
			 } else if(x1>x2&&y1>y2){
			 	if(y3>y){
			 		//顺 
			 		cout<<"Clockwise"<<endl;
				 }else{
				 	//逆 
				 	cout<<"Counterclockwise"<<endl;
				 } 
			 } else if(x1>x2&&y1<y2){
			 	if(y3>y){
			 		//顺 
			 		cout<<"Clockwise"<<endl;
				 }else{
				 	//逆 
				 	cout<<"Counterclockwise"<<endl;
				 } 
			 } 
			
		}
	}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值