打牌

一羣人想打鬥地主和升級。已知他們已經1個、2個、3個或者4我的成爲一桌了,如今要把他們所有變成3人一桌或者4人一桌,問至少移動幾我的?(要保證全部人都能進行遊戲) 輸入格式: 多組數據,每組數據一行,包含4個整數a,b,c,d 0<=a,b,c,d<=100000000表示1我的、兩我的、3我的、4我的的桌數。 輸出格式: 至少移動的人數,若是不可能完成,輸出-1spa

#include<stdio.h>
int getMinCount(int* m)
{
    int sum = m[0]*1+m[1]*2+m[2]*3+m[3]*4;
    int ms = 0;
    //首先判斷參加遊戲的人數是否能夠分紅每桌3人或者4人
    //簡單的思想是每桌先3人,而後將多餘的分到每桌
    //若是剩餘的人數多餘桌數,則說明參加遊戲的人數不知足要求
    //也能夠簡單的寫成sum > 5這樣的判斷
    if(sum % 3 > sum / 3)
        ms = -1;
    //若是1人桌的個數大於2人桌,則先將2人桌湊成3人桌,
    //而後將多餘的1人桌合併成3人桌(比4人桌要少移動)
    if(m[0] >= m[1])
    {
        ms = m[1] + (m[0]-m[1])/3 * 2 + (m[0]-m[1])%3;
     }
    else
    {
        //若是2人桌的個數小於1人桌和4人桌,
        //則能夠移動1人桌,拆4人桌的1人與2人桌合併
        //這樣最多移動m[1]個
        if(m[1] <= m[0] + m[2])
            ms = m[1];
        //若是2人桌多於1人桌和4人桌,則先將1人桌合併到2人桌,
        //而後拆分4人桌,合併到2人桌,而後將多餘的2人桌拆分,
        else
            ms = (m[1] - m[0] - m[2]) * 2 / 3 + m[0] + m[2] + ((m[1] - m[0] - m[2]) * 2) / 3 ;
    }
    return ms;
}

int main(){
    int a[] = {3,300,3,4};
    int ms = getMinCount(a);
    printf("minCount is %d",ms);
    return 0;
}

不知本身的思路對不對,考慮的周不周全code

相關文章
相關標籤/搜索