题目:
选择队伍参加ACM比赛,可以选择的人由N+M组成,N代表N个擅长算法的人,M代表M个擅长编程的人,选择要求:每个队伍三个人,每个队伍中至少有一个擅长算法的人,至少有一个擅长编程的人。求可以组成的最多队伍?
思路:
每个队伍3个人,可以按照(m+n)/3进行循环判断,每次在n和m中分别抽走1个人和2个人,从n和m中较大中抽去2人,满足一定条件跳出循环。
实现:
1 int getResult (int n, int m) { 2 3 if(n <= 0 || m <= 0 || n+m < 3) { 4 return 0; 5 } 6 int count = 0; 7 int tempMax = (m+n)/3; 8 for (int i = 0; i < tempMax; ++i) { 9 if (m >= 1 && n >=1 && (m+n) >=3 ) { 10 count++; 11 if(n >= m) { 12 n-=2; 13 m-=1; 14 }else if(n < m) { 15 n-=1; 16 m-=2; 17 } 18 }else { 19 break; 20 } 21 22 } 23 24 return count; 25 } 26 27 /** 28 * Entrance 29 * @return 30 */ 31 32 int main () 33 { 34 int N,M; 35 cin >> N >> M; 36 cout << getResult(N,M); 37 }