新浪微博上有一个帖子给出了一道题:全班有 50 人,有 30 人会游泳,有 35 人会篮球,有 42 人会唱歌,有 46 人会骑车,至少有( )人四项都会。
发帖人不会做这道题,但是回帖有会做的:每一个才艺是一个技能点,一共是 30 + 35 + 42 + 46 = 153 个技能点,50 个人假设平均分配,每人都会 3 个技能那也只有 150,所以至少有 3 人会四个技能。
本题就请你写个程序来自动解决这类问题:给定全班总人数为 n,其中有 m 项技能,分别有 k1、k2、……、km 个人会,问至少有多少人 m 项都会。
输入格式:
输入在第一行中给出 2 个正整数:n(4≤n≤1000)和 m(1<m≤n/2),分别对应全班人数和技能总数。随后一行给出 m 个不超过 n 的正整数,其中第 i 个整数对应会第 i 项技能的人数。
输出格式:
输出至少有多少人 m 项都会。
输入样例:
50 4
30 35 42 46
输出样例:
3
思路:特别注意第一种情况
if(t1<m-1)res=0; //例如:如果有4个项目,若平均分配后每人只有2项,那么一定是没有人全能(因为只要有一个人4项,那么平均下来一定有2人是3项)
else if(t1==m-1)res=t2; //平均分,每个人会m-1项,若有余数,那么至少余数个人m项全能;若没有余数,只有在至多的情况下才会有人m项全能,至少情况下是没有人全能
else if(t1>m-1)res=n; //每个人m项全能
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,s=0,t1,t2,res;
cin>>n>>m;
int a[m];
for(int i=0;i<m;i++)
{
cin>>a[i];
s+=a[i];
}
t1=s/n;
t2=s%n;
if(t1<m-1)res=0; //例如:如果有4个项目,若平均分配后每人只有2项,那么一定是没有人全能(因为只要有一个人4项,那么平均下来一定有2人是3项)
else if(t1==m-1)res=t2; //平均分,每个人会m-1项,若有余数,那么至少余数个人m项全能;若没有余数,只有在至多的情况下才会有人m项全能,至少情况下是没有人全能
else if(t1>m-1)res=n; //每个人m项全能
cout<<res;
return 0;
}