一羣人想打鬥地主和升級。已知他們已經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