77ym 2022-12-23 11:52 采纳率: 66.7%
浏览 389
已结题

c语言 pta 座位安排

pta 座位安排

在某次上机考试时,座位安排规则如下:

先按考生姓名的字典序排列,若姓名相同则再按学号升序排序;在排好序之后依次从1号机位开始安排座位;
若某个机位的电脑损坏了,则原来安排在该位置上的考生从当前最后一位考生之后的机位开始重新安排。
请根据输入的学生信息及电脑损坏的机位,安排好该次考试的学生座位。

输入格式:
首先输入一个正整数T,表示测试数据的组数。对于每组测试数据,首先输入一个整数n(1<n<=80),表示考生数;然后输入n行,每行包含2个以一个空格间隔的字符串,分别表示一个考生的学号(长度不超过10,且仅包含数字字符,可能以0开头)和姓名(长度不超过15,且仅包含英文字母);最后输入一行整数,其中第一个整数m(1<=m<=20)表示损坏电脑的数量,接着是m个电脑损坏的机位(不超过n)。

输出格式:
对于每组测试,输出n+1行,第1行是“Case i:”,其中i是该组测试的序号(从1开始),接着输出n个座位安排信息“,

输入样例:
2
5
01004 Zhangsan
01002 Lisi
01003 Wangwu
01005 Zhaoliu
01001 Lisi
3 5 1 3
5
1004 Zhangsan
1002 Lisi
1003 Wangwu
1005 Zhaoliu
1001 Lisi
1 5

输出样例:
Case 1:
002:01002 Lisi
004:01004 Zhangsan
006:01001 Lisi
007:01003 Wangwu
008:01005 Zhaoliu

Case 2:
001:1001 Lisi
002:1002 Lisi
003:1003 Wangwu
004:1004 Zhangsan
006:1005 Zhaoliu
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

  • 写回答

1条回答 默认 最新

  • 会修bug的猫 2022-12-23 17:13
    关注
    
    #include<stdio.h>
    #include<string.h>
    typedef struct student {
        char id[11];
        char name[16];
    }student;
    int main() {
        int T;
        scanf("%d",&T);
        for(int k=1;k<=T;++k){
            int n;
            scanf("%d",&n);
            student p[n];
            for(int i=0;i<n;++i){
                scanf("%s%s",p[i].id,p[i].name);
            }
            
            for(int i=0;i<n;++i){
                for(int j=0;j<n-1-i;++j){
                    if(strcmp(p[j].name,p[j+1].name)>0){
                        student temp=p[j];
                        p[j]=p[j+1];
                        p[j+1]=temp;
                    }
                    else if(strcmp(p[j].name,p[j+1].name)==0&&strcmp(p[j].id,p[j+1].id)>0){
                        student temp=p[j];
                        p[j]=p[j+1];
                        p[j+1]=temp;
                    }
                }
            }
            int pos[2*n+1],flag[2*n+1];//flag,0代表没有问题且未被坐的座位,1表示故障的座位,2表示被坐的座位 
            for(int i=0;i<2*n+1;++i){
                flag[i]=pos[i]=0;
            }
            int m;
            scanf("%d",&m);
            for(int i=1;i<=m;++i){
                int t;
                scanf("%d",&t);
                flag[t]=1;
            }
            for(int i=1;i<=n;++i){
                pos[i]=i;
                if(flag[i]==0){
                    flag[i]=2;
                }
            }
            for(int i=1;i<=n;++i){
                if(flag[i]==1&&pos[i]!=0){
                    for(int j=i+1;j<=2*n;++j){
                        if(flag[j]==0){
                            flag[j]=2;
                            pos[i]=0;
                            pos[j]=i;
                            break;
                        }
                    }
                }
            }
            printf("Case:%d\n",k);
            for(int i=1;i<=2*n;++i){
                if(pos[i]!=0)
                printf("%03d:%s %s\n",i,p[pos[i]-1].id,p[pos[i]-1].name);
            }
        } 
    }
    

    img

    结果完全正确

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月18日
  • 请采纳用户回复 12月25日
  • 创建了问题 12月23日

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错