列表

详情


NC207439. 电竞希金斯

描述

大司马绰号“电竞希金斯”,所以他的几何非常好。他发明的“马氏几何”多次挑战牛顿和爱因斯坦的理论,连奥沙利文都直呼内行。
本题就是一道关于计算几何的题目。
给定一条直线ax+by+c=0,请以编号从小到大的顺序输出这条直线经过的象限。
注意,x轴和y轴不属于任何一个象限,第一象限为x,y>0的区域,第二象限为x<0,y>0的区域,第三象限为x,y<0的区域,第四象限为x>0,y<0的区域。

输入描述

每个测试点仅包含一组输入数据。
仅一行空格隔开的三个整数
其中a和b不会同时等于0

输出描述

一行,按照顺序输出经过的象限。
如果直线不经过任何象限,请输出"non"。

示例1

输入:

1 2 3

输出:

2 3 4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 488K, 提交时间: 2020-06-03 20:57:56

#include<stdio.h>
main()
{
	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if(a!=0&&b!=0)
	{
		if(c==0)
		{
			if(a*b>0) printf("2 4");
			else printf("1 3");
		}
		else
		{
			if(a*b>0&&c*b<0) printf("1 2 4");
			if(a*b>0&&c*b>0) printf("2 3 4");
			if(a*b<0&&c*b<0) printf("1 2 3");
			if(a*b<0&&c*b>0) printf("1 3 4");
		}
	}
	else 
	{
		if(a==0) 
		{
			if(c==0) printf("non");
			else if(c*b>0) printf("3 4");
			else printf("1 2");
		}
		else
		{
			if(c==0) printf("non");
			else if(c*a>0) printf("2 3");
			else printf("1 4");
		}
	}
 } 

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 496K, 提交时间: 2020-05-30 13:33:28

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c;
	while(cin>>a>>b>>c){
//	cin>>a>>b>>c;
	if(b==0)
	{
		if(c==0)	printf("non");
		if(a*c>0)	printf("2 3");
		if(a*c<0)	printf("1 4");
	}
	else if(c==0)
	{
		if(b*a>0)	printf("2 4");
		if(b*a<0)	printf("1 3");
		if(b*a==0)	printf("non");
	}
	else if(c*b<0)
	{
		printf("1 2");
		if(a*b<0)	printf(" 3");
		if(a*b>0)	printf(" 4");
	}
	else if(c*b>0)
	{
		if(a*b<0)	printf("1 ");
		if(a*b>0)	printf("2 ");
		printf("3 4");
	}
	printf("\n");
		}
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2020-05-30 13:21:02

#include <iostream>
using namespace std;
int main(){
	int a,b,c;
	cin>>a>>b>>c;
	if(a==0){
		if(b*c>0) cout<<"3 4";
		else if(b*c==0) cout<<"non";
		else cout<<"1 2";
	}
	else if(b==0){
		if(a*c>0) cout<<"2 3";
		else if(a*c==0) cout<<"non";
		else cout<<"1 4";
	}
	else{
		if(a*b>0){
			if(b*c>0) cout<<"2 3 4";
			else if(b*c==0) cout<<"2 4";
			else cout<<"1 2 4";
		}
		else{
			if(b*c>0) cout<<"1 3 4";
			else if(b*c==0) cout<<"1 3";
			else cout<<"1 2 3";
		}
	}

	return 0;
}

Python3(3.5.2) 解法, 执行用时: 26ms, 内存消耗: 3428K, 提交时间: 2020-05-30 13:57:11

a, b, c = map(int, input().split())
if c == 0:
    if a * b == 0: print("non")
    elif a * b < 0: print(1, 3)
    else: print(2, 4)
else:
    if a == 0:
        if b * c < 0: print(1, 2)
        else: print(3, 4)
    elif b == 0:
        if a * c < 0: print(1, 4)
        else: print(2, 4)
    elif a * b < 0:
        if c * b < 0: print(1, 2, 3)
        else: print(1, 3, 4)
    else:
        if c * b < 0: print(1, 2, 4)
        else: print(2, 3, 4)

上一题