4.1 排序
问题 A: 排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n, a[110];
while(cin>>n){
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
for(int i=0; i<n; i++) cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}
问题 B: 特殊排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n, a[1010];
while(cin>>n){
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
cout<<a[n-1]<<endl;
if(n==1) cout<<-1;
else for(int i=0; i<n-1; i++) cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}
问题 C: EXCEL排序
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct Student {
char id[8];
char name[10];
int score;
}stu[100010];
bool cmp1(Student a,Student b){
return strcmp(a.id,b.id)<0;
}
bool cmp2(Student a,Student b){
int flag=strcmp(a.name,b.name);
if(flag!=0) return flag<0;
else return strcmp(a.id,b.id)<0;
}
bool cmp3(Student a,Student b){
if(a.score!=b.score) return a.score<b.score;
else return strcmp(a.id,b.id)<0;
}
int main(){
int n,c,flag=1;
while(scanf("%d %d",&n,&c)!=EOF){
if(n==0)break;
for (int i=0;i<n;i++) scanf("%s %s %d",stu[i].id,stu[i].name,&stu[i].score);
if(c==1) sort(stu,stu+n,cmp1);
else if(c==2) sort(stu,stu+n,cmp2);
else sort(stu,stu+n,cmp3);
printf("Case %d:\n",flag);
for (int i=0;i<n;i++) printf("%s %s %d\n",stu[i].id,stu[i].name,stu[i].score);
flag++;
}
return 0;
}
问题 D: 字符串内排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
char n[210];
while(gets(n)){
string a = n;
sort(n,n+a.size());
cout<<n<<endl;
}
return 0;
}
问题 E: Problem B
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n;
while(cin>>n){
int a[15][15], r[50]={0}, m=0, s=0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin>>a[i][j];
r[m] += a[i][j];
}
m++;
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
r[m] += a[j][i];
if(i==j) s+=a[i][j];
}
m++;
}
r[m++] = s;
for(int i=0; i<n; i++) r[m]+=a[i][n-i-1];
sort(r,r+m+1,cmp);
for(int i=0; i<=m; i++) cout<<r[i]<<" ";
cout<<endl;
}
return 0;
}
问题 F: 小白鼠排队
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef struct {
int w;
string c;
}m;
bool cmp(m a,m b){
return a.w>b.w;
}
int main(){
int n;
while(cin>>n){
m s[110];
for(int i=0; i<n; i++) cin>>s[i].w>>s[i].c;
sort(s,s+n,cmp);
for(int i=0; i<n; i++) cout<<s[i].c<<endl;
}
return 0;
}
问题 G: 中位数
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
while(cin>>n,n){
int a[10010];
for(int i=0; i<n; i++) cin>>a[i];
sort(a,a+n);
if(n%2 != 0) cout<<a[n/2]<<endl;
else cout<<(a[n/2-1]+a[n/2])/2<<endl;
}
return 0;
}
问题 H: 整数奇偶排序
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a, int b){
return a>b;
}
int main(){
int t[15];
while(cin>>t[0]>>t[1]>>t[2]>>t[3]>>t[4]>>t[5]>>t[6]>>t[7]>>t[8]>>t[9]){
int a[15], b[15], m=0, n=0;
for(int i=0; i<10; i++){
if(t[i]%2 != 0) a[m++] =t[i];
else b[n++] =t[i];
}
sort(a,a+m,cmp);
sort(b,b+n);
for(int i=0; i<m; i++) cout<<a[i]<<" ";
for(int j=0; j<n; j++) cout<<b[j]<<" ";
cout<<endl;
}
return 0;
}
问题 I: 排名
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef struct{
string s;
int g=0;
}stu;
bool cmp(stu a, stu b){
if(a.g != b.g) return a.g>b.g;
else return a.s<b.s;
}
int main(){
int n;
while(cin>>n,n){
int m, l;
cin>>m>>l;
int f[15];stu x[1010];
for(int i=1; i<=m; i++) cin>>f[i];
for(int i=0; i<n; i++){
int y, k;
cin>>x[i].s>>y;
for(int j=0; j<y; j++){
cin>>k;
x[i].g += f[k];
}
}
sort(x,x+n,cmp);
int sum=0;
for(int i=0; i<n; i++) sum++;
cout<<sum<<endl;
for(int i=0; i<sum; i++) cout<<x[i].s<<" "<<x[i].g<<endl;
}
return 0;
}
4.2 哈希
问题 A: 谁是你的潜在朋友
#include<iostream>
using namespace std;
int main(){
int m, n;
while(cin>>n){
cin>>m;
int x[210]={0}, a[n];
for(int i=0; i<n; i++){
cin>>a[i];
x[a[i]]++;
}
for(int i=0; i<n; i++){
if(x[a[i]] != 1) cout<<x[a[i]]-1<<endl;
else cout<<"BeiJu"<<endl;
}
}
}