RZOJ P1824 对号入箱 题解

题目传送门
考虑到本题难度中等,很适合学习数组和函数、过程的同学。

题目描述

输入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传送门
本文章为博主原创文章,请尊重知识产权,转载请附上原文链接!

猜你喜欢

转载自blog.csdn.net/yingyouyu/article/details/88074582