题目传送门
考虑到本题难度中等,很适合学习数组和函数、过程的同学。
题目描述
输入N和一组整数(以0结束),N表示编号1,2,…,N的箱子,一组整数表示零件的重量(单位为G)。现要求将一批零件,分别装入编号为1,2,…,N的N只箱子中去,装入的方法是: 0G< 零件重量<100G 装入1号箱 100G<=零件重量<150G 装入2号箱 150G<=零件重量<200G 装入3号箱 …… …… 以此类推。装完之后,要求找出哪只箱子中的零件个数最多,若有相同的最多则要求全部列出(仅列出箱子的号数即可),若因零件太重无箱子可装,也应输出这类零件的个数。
解决方案
输入n与重量之后,可以判断应该装入哪个箱子,若要求比第n个箱子大,自动定为others就行了。
代码
#include<iostream>
using namespace std;
int n,x,a[100];
int find_box(int x){
if(x>0 && x<100) return 1;
for(int i=2;i<=n;i++){
int left=i*50;
int right=left+49;
if(x>=left && x<=right) return i;
}
return n+1;
}
int find_max(){
int ans=a[1];
for(int i=2;i<n;i++)
if(ans<a[i]) ans=a[i];
return ans;
}
void print(int zd){
for(int i=1;i<=n;i++)
if(a[i]==zd) cout<<"No."<<i<<endl;
if(a[n+1]>0) cout<<"Others:"<<a[n+1];
}
int main(){
cin>>n;
while(1){
cin>>x;
if(x==0) break;
int bh=find_box(x);
a[bh]++;
}
int zd=find_max();
print(zd);
return 0;
}
注意:此代码比较难理解,请自己登陆RZOJ去试一下。
RZOJ传送门
本文章为博主原创文章,请尊重知识产权,转载请附上原文链接!