1、基数排序
#include <iostream>
using namespace std;const int N = 105;struct node {int len;int data[N];
};int a[N];
int n, k = 0;void map_sort() {node t[11];// 初始化所有桶的长度为0for(int i = 0; i < 10; i++) { // 修正:桶索引应为0-9t[i].len = 0;}int maxn = -1e9;for(int i = 1; i <= n; i++) {if(a[i] > maxn) {maxn = a[i];}}int num = 1;while(maxn > 0) {k++;// 将元素分配到对应的桶中for(int i = 1; i <= n; i++) {int d = (a[i] / num) % 10; // 修正:避免变量名冲突t[d].data[t[d].len++] = a[i];}num *= 10;maxn /= 10;// 从桶中收集元素int m = 1;for(int i = 0; i < 10; i++) { // 修正:桶索引应为0-9for(int j = 0; j < t[i].len; j++) { // 修正:数组索引从0开始a[m++] = t[i].data[j];}t[i].len = 0; // 清空桶}// 输出每一轮的结果if(k<3){for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<"\n";}else if(k==3){for(int i=1;i<=n;i++){cout<<a[i]<<" ";}}}
}int main() {cin >> n;for(int i = 1; i <= n; i++) {cin >> a[i];}map_sort();return 0;
}
2、统计工龄
#include<bits/stdc++.h>
using namespace std;
const int N=55;
int a[N];
int n,m;
int main() {cin>>n;for(int i=1;i<=n;i++){cin>>m;a[m]++;}for(int i=0;i<=50;i++){if(a[i]){cout<<i<<":"<<a[i]<<endl;}}return 0;
}
3、PAT排名汇总
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
struct node{string num; // 考生的学号int score;int pm1; // 总排名int bh; // 考点编号int pm2; // 考点内排名
}b[N],a[N];
int n;bool cmp(node u,node v){if(u.score==v.score){return u.num<v.num;}else{return u.score>v.score;}
}int main(){cin>>n;int cnt=0; // 总考生数// 处理每个考点for(int i=1;i<=n;i++){int m;cin>>m;// 读取当前考点的考生信息for(int j=1;j<=m;j++){cin>>a[j].num>>a[j].score;a[j].bh=i; // 记录考点编号}// 考点内排序sort(a+1,a+1+m,cmp);// 计算考点内排名a[1].pm2 = 1; // 初始化第一个考生的排名for(int j=2;j<=m;j++){if(a[j].score==a[j-1].score){a[j].pm2=a[j-1].pm2; // 分数相同,排名相同}else{a[j].pm2=j; // 分数不同,排名为当前位置}}// 将当前考点的考生加入总列表for(int j=1;j<=m;j++){b[++cnt]=a[j]; // 使用前置++确保p从1开始}}// 全局排序sort(b+1,b+cnt+1,cmp);// 计算总排名b[1].pm1 = 1; // 初始化第一个考生的总排名for(int i=2;i<=cnt;i++){if(b[i].score==b[i-1].score){b[i].pm1=b[i-1].pm1; // 分数相同,排名相同}else{b[i].pm1=i; // 分数不同,排名为当前位置}}// 输出结果cout<<cnt<<endl;for(int i=1;i<=cnt;i++){cout<<b[i].num<<" "<<b[i].pm1<<" "<<b[i].bh<<" "<<b[i].pm2<<endl;}return 0;
}
4、抢红包
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
struct node{int num;//编号 int money=0;//收入金额 int sum=0;//抢到红包的个数
}a[N];
int n;
bool cmp(node u,node v){if(u.money!=v.money){return u.money>v.money;}else{if(u.sum!=v.sum){return u.sum>v.sum;}else{return u.num<v.num;}}
}
int main(){cin>>n;for(int i=1;i<=n;i++){a[i].num=i;int k;cin>>k;for(int j=1;j<=k;j++){int num1;//抢到红包的数量 double money1;//抢到红包的金额 cin>>num1>>money1;a[num1].money+=money1;a[num1].sum++;a[i].money-=money1;}}sort(a+1,a+1+n,cmp);//sort函数排序for(int i=1;i<=n;i++){cout<<a[i].num<<" "<<fixed<<setprecision(2)<<a[i].money/100.0<<"\n";} return 0;
}
5、二叉树非叶子
#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct node{int value;int left;int right;
}a[N];
int n;
void xianxu(int idx){if(idx==0)return;cout<<a[idx].value<<" ";xianxu(a[idx].left);xianxu(a[idx].right);
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].value>>a[i].left>>a[i].right;}for(int i=1;i<=n;i++){if(a[i].left!=0||a[i].right!=0){a[i].value++;}}xianxu(1);cout<<endl;return 0;
}
6、月饼
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
struct node{double kcl;double zsj;double dj;
}a[N];
int n,d;
bool cmp(node a,node b){return a.dj>b.dj;
}
int main(){cin>>n>>d;for(int i=1;i<=n;i++){cin>>a[i].kcl;}for(int i=1;i<=n;i++){cin>>a[i].zsj;a[i].dj=a[i].zsj/a[i].kcl;}sort(a+1,a+n+1,cmp);double maxprice=0.0;for(int i=1;i<=n&&d>0;i++){if(a[i].kcl<=d){maxprice+=a[i].zsj;d-=a[i].kcl;}else{maxprice+=a[i].dj*d;d=0;}}cout<<fixed<<setprecision(2)<<maxprice<<endl;return 0;
}
7、寻找大富翁
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long a[N];
int n,m;
bool cmp(long long a,long long b){return a>b;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1,cmp);for(int i=1;i<=m&&i<=n;i++){if(i>1)cout<<" ";cout<<a[i];}return 0;
}
























