题目:电竞希金斯
来源:厦门大学“网宿杯“17届程序设计竞赛决赛(同步赛)

题目解析

题目要求:给出直线 经过的象限。 不会同时为 0。

直线不经过任何象限的两种情况:直线为

时,直线为
时,直线为
时,直线经过点和点

C++代码

#include<iostream>
using namespace std;

string quadrant(int a, int b, int c){
    string ans = "non";
    if(a == 0){    // y = -c/b
        if(b * c < 0)
            ans = "1 2";
        else if(b * c > 0)
            ans = "3 4";
    }
    else if(b == 0){    // x = -c/a
        if(a * c < 0)
            ans = "1 4";
        else if(a * c > 0)
            ans = "2 3";
    }
    else{
        if(c == 0){    // y = (-a/b)x
            if(a * b > 0)
                ans = "2 4";
            else
                ans = "1 3";
        }
        else{    // 经过点(0,-c/b)和点(-c/a,0)
            if(b*c > 0 && c*a > 0)
                ans = "2 3 4";
            else if(b*c > 0 && c*a < 0)
                ans = "1 3 4";
            else if(b*c < 0 && c*a > 0)
                ans = "1 2 3";
            else
                ans = "1 2 4";
        }
    }

    return ans;
}

int main(){
    int a, b, c;
    cin >> a >> b >> c;
    cout << quadrant(a, b, c) << endl;
    return 0;
}