考试座位号

描述:

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式:

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号`由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例:

4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出样例:

3310120150912002 2
3310120150912119 1

代码:

//三个数组
#include <stdio.h>
int main()
{
    char a[1001][17];
    int x,z,n,i=0;
    scanf("%d",&x);
    int b[x],c[x];

    for(i=0;i<x;i++)
        scanf("%s %d %d",a[i],&b[i],&c[i]);

    scanf("%d",&z);
    int d[z]; 
    for(i=0;i<z;i++)
        scanf("%d",&d[i]);

    for(i=0;i<z;i++)
        for(n=0;n<x;n++)
        {
            if(d[i]==b[n])
                printf("%s %d\n",a[n],c[n]);
        }
    return 0;
}

解析:

首先利用三个数组分别保存保存准考证号,试机座位号,考试座位号。然后把要查询的放到一个数组里面,最后两个循环找到满足条件的两个数组。利用字符数组是因为准考证号超过了int的范围,二维字符数组相当于字符串数组。

代码:

//结构体
#include<bits/stdc++.h>
using namespace std;
typedef struct{
    char a[20];
    int b,c;
}Edu;
int main(){
    int n;
    cin>>n;
    Edu s[n];
    for(int i=0;i<n;i++){
        cin>>s[i].a>>s[i].b>>s[i].c;
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++){
        int num;
        cin>>num;
        for(int i=0;i<n;i++){
            if(num==s[i].b){
                cout<<s[i].a<<" "<<s[i].c<<endl;
                break;
            }
        }
    }
    return 0;
} 

解析:

  1. <bits/stdc++.h> #万能头,里面包含了C/C++所有的头文件。
  2. using namespace std; #引用命名空间std的内容,以后会细讲。
  3. cin #C++的输入语句。
  4. cout #C++的输出语句。
  5. endl #相当于'\n'换行符

使用结构体接收数据,最后也是两个循环找到满足条件的数据。

字符串的冒泡排序

描述:

我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:

输入在第1行中给出NK(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

输入样例:

6 2
best
cat
east
a
free
day

输出样例:

best
a
cat
day
east
free

代码:

#include<stdio.h>
#include<string.h>
int main(){
    char a[105][15];
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%s",a[i]);
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n-i-1;j++){
            if(strcmp(a[j],a[j+1])>0){
                char s[15];
                strcpy(s,a[j]);
                strcpy(a[j],a[j+1]);
                strcpy(a[j+1],s);
            }
        }
    }
    for(int i=0;i<n;i++){
        printf("%s\n",a[i]);
    }
    return 0;
}

解析:

二维字符数组相当于字符串数组,就是一个冒泡排序的应用,给出了固定的排列次数,所以外循环是m,内循环依然是n-i-1strcmp是比较两个字符串的函数,strcpy是交换两个字符串的函数,最后循环输出。


一只小菜鸡