0
已解决
黄依成
中级天翼
中级天翼
#include<iostream>
using namespace std;
int n,a[55],b[55],ans[55];
bool c[55];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[a[i]]++;
}
for(int i=1;i<=n/2;i++){
int maxn=0,pos;
for(int j=1;j<=50;j++){
if(b[j]>maxn){
maxn=b[j];
pos=j;
}
}
b[pos]=-1;
if(!c[a[pos]]){
ans[pos]=a[pos];
c[a[pos]]=1;
}else{
for(int j=1;j<=n;j++){
if(c[j]==0){
ans[i]=a[j];
break;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<i<<" "<<ans[i]<<endl;
}
return 0;
}
怎么改qwq
黄依成在2020-10-07 19:43:36追加了内容
#include<iostream>
using namespace std;
int n,a[55],b[55],ans[55];
bool c[55];//记录有没有安排同桌
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[a[i]]++;
}
for(int i=1;i<=n/2;i++){
int maxn=0,pos;
for(int j=1;j<=50;j++){
if(b[j]>maxn){//找投票最多的人
maxn=b[j];
pos=j;
}
}
b[pos]=-1; //找过后赋值,下次不会找到
if(!c[a[pos]]){//如果没有安排座位
ans[pos]=a[pos];//记录答案
c[a[pos]]=1;//有同桌,记录1
}else{//如果已经安排座位
for(int j=1;j<=n;j++){//找序号最小的人
if(c[j]==0){
ans[i]=a[j];
break;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<i<<" "<<ans[i]<<endl;
}
return 0;
}
是不是写的很乱