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];
// 初始化所有桶的长度为0
for(int i = 0; i < 10; i++) { // 修正:桶索引应为0-9
t[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-9
for(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;
}
























