题目:ACM比赛组队(Java和C++)(美团在线笔试编程题)

题目描述:

在ACM竞赛中,一支队伍由三名队员组成,现在有N+M名学生,其中有N名学生擅长算法,剩下M名学生擅长编程,这些学生要参加ACM竞赛,他们的教练要求每支队伍至少有一名擅长算法和一名擅长编程的学生,那么这些学生最多可以组成多少支队伍?

 

输入: 输入两个整数M,N,其中1<N,M<10000000

输出:最多可以组成的队伍数

 

分析:一支队伍中有一名擅长算法和一名擅长编程的,剩下的这名同学该怎样选择就成了本题的关键。

          我们从0开始建立队伍,首先选择一名擅长算法的和一名擅长编程的,然后剩下一名选择这两种学生剩下人数多的那一种的学生。

 

思路:1.从第一支队伍开始。选择一名擅长算法的和一名擅长编程的。

           2.剩下的一名学生选择当前剩下人数多的那种学生。一支队伍完成。

           3.然后又回去执行第一步,直到总人数不足3人或者一种学生为0结束。

Java代码实现:

在线运行代码提示:请在运行前输入两整数,例如 23 34

import java.util.Scanner;
public class CalculateTeam
{
	public static void main(String[] args)
	{
		Scanner scanner=new Scanner(System.in);
		int N,M;
		N=scanner.nextInt(); //输入N,M
		M=scanner.nextInt();
		int n=N,m=M;
		int sumTeam=0;//队伍数
		if(N<0||M<0||N>10000000||M>10000000)
		{
			System.out.println("数据不合法");
		}
		else
		{
			while (!(m+n<3||m==0||n==0)) // 如果剩余总人数小于3人或任意一种学生没有剩下时退出循环
			{
				m--;
				n--;
				if(n>m) //选择剩下人数多的那种学生作为队伍的第三个人
				{
					n--;
				}
				else
				{
					m--;
				}
				sumTeam++;
			}
			System.out.println(sumTeam); //输出最大队数
		}	
	}
}

 

C++实现:

在线运行代码提示:请在运行前输入两整数,例如 23 34

#include <stdio.h>

int main()
{
	int N,M;
	scanf("%d %d",&N,&M);
	int n=N,m=M;
	int sumTeam=0;//队伍数
	if(N<0||M<0||N>10000000||M>10000000)
		{
			printf("数据不合法");
		}
		else
		{
			while (!(m+n<3||m==0||n==0)) // 如果剩余总人数小于3人或任意一种学生没有剩下时退出循环
			{
				m--;
				n--;
				if(n>m) //选择剩下人数多的那种学生作为队伍的第三个人
				{
					n--;
				}
				else
				{
					m--;
				}
				sumTeam++;
			}
			printf("%d",sumTeam); //输出最大队数
		}	
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值