1. 程式人生 > >鴿兔(雞兔)同籠不用迴圈

鴿兔(雞兔)同籠不用迴圈

題目描述

童心未泯的redraiment經常帶些碎麵包什麼的去廣場喂鴿子和兔子,並和它們玩耍。一點也不像大學生,還是一副老不正經的樣子,呵呵。
隨著鴿子和兔子數目的增多,redraiment帶的那點食物已經不夠它們瓜分了。為了能讓自己的好朋友吃的飽飽的,redraiment決定統計一下有多少隻鴿子和有多少隻兔子,以便帶來足夠的食物。一、二、三、四、五...他開始數了。
現在,他已經知道有這些鴿子和兔子一共有n個頭和m只腳。請你幫他寫個程式計算一下一共有多少隻鴿子和兔子。 

輸入

輸入包括多組資料。
每行包括2個數據:n、m(代表上面題目中提到的意思1≤n, m≤230)。
n、m都是整數。

輸出

每組資料的輸出都只有一行,分別是鴿子的數量和兔子數量。
如果輸入的測試資料不能求得結果,那肯定是redraiment這個馬大哈數錯了,就輸出"Error"提示他。

樣例輸入

35 94
1 3

樣例輸出

23 12
Error
思路:這道題資料較大,所以用迴圈肯定超限。其實這個比雞兔同籠更簡單,雞和鴿子的頭知道有多少個,如果腳的數量少於雞的二倍肯定是Error,大於兔的四倍也是Error,腳的數量是單數也是Error。剩下的就是可以求出結果的了。
  讓我們想一下,腳的數量-雞和兔子的頭數乘以2=兔子的數量的二倍。因為開始的時候把兔子的腳也按兩隻計算,所以剩下的肯定是兔子沒算的兩隻腳,除以2就是兔子的數量。
#include<stdio.h>
int main()
{
    long long int n,m,h,x,y;n:總頭數 m:總腳數 x=及的個數 y=兔子的個數 h=剩餘的腳
    while(~scanf("%lld%lld",&n,&m))
    {
        if(2*n>m||m%2!=0||4*n<m)printf("Error\n");判斷是否能得到答案
        else
        {
            h=m-2*n;
            y=h/2;
            x=n-y;
            printf("%lld %lld\n",x,y);
        }
    }
}