一組簡單一點的題目(六) T – 整數解

haixinjiazu發表於2019-05-21

題目:T – 整數解
有二個整數,它們加起來等於某個整數,乘起來又等於另一個整數,它們到底是真還是假,也就是這種整數到底存不存在,實在有點吃不準,你能快速回答嗎?看來只能通過程式設計。
例如:x + y = 9,x * y = 15 ? 找不到這樣的整數x和y
1+4=5,1*4=4,所以,加起來等於5,乘起來等於4的二個整數為1和4
7+(-8)=-1,7*(-8)=-56,所以,加起來等於-1,乘起來等於-56的二個整數為7和-8
Input
輸入資料為成對出現的整數n,m(-10000<n,m<10000),它們分別表示整數的和與積,如果兩者都為0,則輸入結束。
Output
只需要對於每個n和m,輸出“Yes”或者“No”,明確有還是沒有這種整數就行了。
Sample Input
9 15
5 4
1 -56
0 0
Sample Output
No
Yes
Yes

思路:因為這個如果一個一個迴圈列舉進行會非常耗時間,所以可以考慮用數學公式進行;

新技巧:有些題目,與數學的計算有關時,可以利用數學公式進而進行一系列的計算;(在某些時候學會運用數學公式);

程式碼:

#include<iostream>
#include<cstdio>
#include<cmath>

using namespace std;

int main()
{
    int i,j;
    int m,n;
    while(cin >> n >> m && (n!=0 || m!=0)){//這個位置的都是0才退出,即可以允許有一方為0.
        int tag=0;                        //退出的條件一定要注意,即用&&還是用||,要注意好
        int x1,y1,x2,y2;
        if((n*n-4*m)>=0){
            x1=(int)(n+sqrt(n*n-4*m))/2;
            y1=n-x1;
            y2=(int)(n-sqrt(n*n-4*m))/2;
            x2=n-y2;
            if(x1*y1==m||x2*y2==m)//這邊的判斷要特別主要,兩種情況都要進行判斷
                tag=1;            //有可能是一方成立的;
        }
        if(tag) cout<< "Yes" << endl;
        else cout << "No" << endl;
    }
    return 0;
}

相關文章