题目链接:点击打开链接
题意: 有 n 个包,大包可以装一个小包,问这些包能组成的最少包数;
题解: 找出 n 个数中出现最多次数的数 k,这个数就是一个基数,即能形成的最少包数(想想就明白了),从小到大排序,每隔 k 个数输出一次,输出的便是答案;
例如:
1122334444556666 可以分成 1346,1346,2456 2456四个,即 k =4;
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
int n;
while(cin>>n&&n){
int a[10000+100];
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int maxx=0; int num=0;
for(int i=0;i<n;i++){
if(a[i]==a[i+1]){
num++;
}
else if(a[i]!=a[i+1]){
num++;
maxx=max(maxx,num);
num=0;
}
}
cout<<maxx<<endl;
for(int i=0;i<maxx;i++){
cout<<a[i];
for(int j=i+maxx;j<n;j+=maxx){
cout<<" "<<a[j];
}
cout<<endl;
}
cout<<endl;
}
return 0;
}