【PAT】basic 1041/1004/1032/1036/1027/1012/1018

/*题号:1041. 考试座位号(15)
 *作者:钱金柱
 *日期:2018年4月26日 22:35
 *题目描述:输入格式:
  输入第一行给出一个正整数N(<=1000),随后N行,每行给出一个考生的信息:“准考证号 试机座位号 考试座位号”。
  其中准考证号由14位数字组成,座位从1到N编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分
  配到同一个座位上。考生信息之后,给出一个正整数M(<=N),随后一行中给出M个待查询的试机座位号码,以空格分隔。
  输出格式:
  对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用1个空格分隔。

  输入样例:
  4
  10120150912233 2 4
  10120150912119 4 1
  10120150912126 1 3
  10120150912002 3 2
  2
  3 4
  输出样例:
  10120150912002 2
  10120150912119 1
 */
 
#include <stdio.h>

struct info
{
    char id[15];
    int w_num;
    int t_num;
};

int main(void)
{
    int i, j;    
    int N;
    scanf("%d", &N);    
    
    struct info students[N];
    
    for(i = 0; i < N; i++)
    {
        scanf("%s %d %d", &students[i].id, &students[i].w_num, &students[i].t_num);
    }
    
    int M;
    scanf("%d", &M);
    
    int a[M];
    
    for(j = 0; j < M; j++)
    {
        scanf("%d ", &a[j]);
    }
    
    for(j = 0; j < M; j++)
    {
        for(i = 0; i < N; i++)
        {
            if(a[j] == students[i].w_num)
                
            printf("%s %d\n", students[i].id, students[i].t_num);
            
        }
        
    }
    
    return 0;
}

#include<stdio.h>
struct Student{
    char name[15];
    char num[15];
    int grade;
}temp,max,min;
int main(){
    int n;
    max.grade=-1;
    min.grade=101;
    scanf("%d",&n);
    while(n--){
        scanf("%s%s%d",temp.name,temp.num,&temp.grade);
        if(temp.grade>max.grade)    max=temp;
        if(temp.grade<min.grade)    min=temp;
    }
    printf("%s %s\n",max.name,max.num);//按坐标输出学生姓名学号 
    printf("%s %s\n",min.name,min.num);
    return 0;

/*题号:1032 挖掘机技术哪家强(20)(20 point(s))
 *作者:钱金柱
 *日期:2018年6月29日 19:58
 *题目描述:为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最*强的那个学校。
 *输入格式:  *输入在第1行给出不超过10^5^的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的**学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
 *输出格式:
 *在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
 *输入样例:
 *6
 *3 65
 *2 80
 *1 100
 *2 70
 *3 40
 *3 0
 *输出样例:
 * 2 150
 */
 
#include <stdio.h>


int main(void)
{
    int i, j;
    int max = 0;
    int N;
    scanf("%d", &N);
    
    if(N > 100000)                           
    {
        return -1;
    }            
    
    int school; 
    int score;
    int max_school;
    //定义一个变量记录学校编号
    int sum[100001] = {0};        //定义一个数组,记录同一所学校的得分总和    
    
    for(i = 0; i < N; i++)
    {
        scanf("%d %d", &school, &score);   //输入各位参赛者的信息
    
        sum[school] += score;  //编号相同的学校的参赛者分数加在一起
        
    
        if(sum[school] > max)                  //筛选出得分最高的学校的编号和成绩总和
        {
            max =sum[school];
            max_school = school;
        }    
    }
        
    printf("%d %d\n", max_school, max);              //打印学校编号和成绩
    
    return 0;

}

/*题号:1036 跟奥巴马一起编程(15)(15 point(s))
 *作者:钱金柱
 *日期:2018年7月2日 12:31
 *题目描述:美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:

输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:

10 a
输出样例:

aaaaaaaaaa
a        a
a        a
a        a
aaaaaaaaaa
 */
 
#include <stdio.h>

int main(void)
{
    int i,j;
    int N;
    char ch;
    scanf("%d %c", &N, &ch);    //给出正方形的边长和组成正方形的字符
    
    int line;                  //定义一个变量表示正方形的行数
    
    if((N % 2) == 0)
        line = N / 2;     //根据给定的边长,有四舍五入确定行数
    else
        line = (N + 1) / 2;
    

    for(i = 0; i < N; i++)    
        printf("%c", ch);        //打印第一行字符
    printf("\n");                
    
    for(i =0; i < (line - 2); i++)        //打印第2行到第(line-1)字符
    {
        for(j = 0; j < N; j++)
        {
            if(j == 0)
                printf("%c", ch);
            else if(j == (N - 1))
            {
                printf("%c", ch);
                printf("\n");
            }
            else
                printf(" ");            
        }
    }
    for(i = 0; i < N; i++)
        printf("%c", ch);      //打印第一行字符
    printf("\n");
    
    return 0;
    }

#include <stdio.h>
#include <math.h>

 
 int main(void)
 {    
    int i, j, z;
    int N;
    char c;
    scanf("%d %c", &N,&c);   //输入要打印符号的数量 ;输入要打印的符号
    
    double n, s;    //符号从第一行递减到一个时的行数
    
    s = sqrt((N + 1)/2);
    
    n = floor(s); //一半沙漏的行数
    
    
    int bottom = 0;
    
    bottom = 2 * n - 1; //顶端字符数
    
    if(bottom % 2 == 0)  //判断最顶端字符数是否为奇数
        bottom = bottom - 1;
        
    int rest = 0;  //剩余字符数
    
    rest = N - ((1 + bottom) * (1 + bottom))/2 + 1;

    
    for(i = 0; i < n; i++)
    {
        for(z = 0; z < i; z++)
            {
                printf(" ");
            }
        
        for(j = 0; j < (bottom - 2 * i); j++)
        {
            printf("%c", c);
        }
        printf("\n");     
    } 
     
    for(i = 1; i < n; i++)
    {
        for(z = (n - 1 - i); z > 0; z--)
            {
                printf(" ");
            }
        
        for(j = 0; j < (1 + 2 * i); j++)
        {
            printf("%c", c);
        }
        printf("\n");     
        
    } 

    printf("%d\n", rest);
     
    return 0;

}

*题号:1012. 数字分类 (20)
 *作者:钱金柱
 *日期:2018年4月10日 14:12
 *题目描述:给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
  A1 = 能被5整除的数字中所有偶数的和;
  A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;
  A3 = 被5除后余2的数字的个数;
  A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
  A5 = 被5除后余4的数字中最大数字。
  输入格式:

  每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。

  输出格式:

  对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

  若其中某一类数字不存在,则在相应位置输出“N”。

  输入样例1:
  13 1 2 3 4 5 6 7 8 9 10 20 16 18
  输出样例1:
  30 11 2 9.7 9
  输入样例2:
  8 1 2 4 5 6 7 9 16
  输出样例2:
  N 11 2 N 9
 */

#include<stdio.h>
#include <math.h>


//float power(float x,int n);
int main(void)
{
    float f;
    int A1 = 0;
    int A2 = 0;
    int A3 = 0;
    float A4 = 0.0;
    int A5 = 0;
    int m = 0;
    int n = 0;
    int i, d, z; 
    int j = -1;
    int temp1 = 0;
    int temp2 = 0;
    char c = 'N';
    int N;
    scanf("%d", &N);
    
    int a[N];
    int b[1000];
    
    for(i = 0; i < N; i++)
    {    
        scanf("%d", &a[i]);
    }
    
    for(i = 0; i < N; i++)
    {
        if(a[i] % 2 == 0 && a[i] % 5 == 0)
            A1 += a[i];
        else
            continue;
    }
    
    if(A1 != 0)
        printf("%d ", A1);
    else
        printf("%c ", c);
    
    for(i = 0; i < N; i++)
    {
        if(a[i] % 5 == 1)
        {
            m += 1;
            A2 += a[i] * pow(-1,m+1);
            //A2 += a[i] * power(-1,m + 1);
        }
        else
            temp1 += 1;        
    }
    
    if(temp1 != N)
        printf("%d ", A2);
    else
        printf("%c ", c);
    
    for(i = 0; i < N; i++)
    {
        if(a[i] % 5 == 2)
            A3 += 1;    
        else
            continue;    
    }
    
    if(A3 != 0)
        printf("%d ", A3);
    else
        printf("%c ", c);
    
    for(i = 0; i < N; i++)
    {
        if(a[i] % 5 == 3)
        {
            n += 1;
            A4 += a[i];
        }
        else
            temp2 += 1;        
    }
    
    if(temp2 != N)
        printf("%.1f ", A4 / n);
    else
        printf("%c ", c);
    
    for(i = 0; i < N; i++)
    {
        
        if(a[i] % 5 == 4)
        {
            j += 1;
            b[j] = a[i];
        }
        else
            continue;            
    }
    
    for(z = 0; z <= j; z++)
    {
        d =b[z] - A5;
        if(d >= 0)
            A5 = b[z];
        else
            A5 = A5;
    }
        
    if(A5 != 0)
        printf("%d\n", A5);
    else
        printf("%c\n", c);
    
    return 0;
}


/* float power(float x,int n)        //自定义乘方函数
{  int i; 
   float s=1.0;                            //初始化变量s,用于存储最终结果值

   for( i=1;i<=n;i++ )                     //利用循环进行计算,n次方就是把x乘上n遍
       s *= x;

   return s;                               //返回最终结果值
} */

/*题号:1018 锤子剪刀布 (20 分)
 *作者:钱金柱
 *日期:2018年10月25日 13:28
 *题目描述:输入格式:
    输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B代表“布”,第个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。

    输出格式:
    输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。

    输入样例:
    10
    C J
    J B
    C B
    B B
    B C
    C C
    C B
    J B
    B C
    J J
    输出样例:
    5 3 2
    2 3 5
    B B
*/

#include <stdio.h>


int main()
{
    int N;
    scanf("%d", &N);
    if (N > 100000)
    {
        return -1;
    }
    int i = 0;
    int jiaWin = 0, jiaLose = 0, draw = 0;
    int jiaJWin = 0, jiaCWin = 0, jiaBWin = 0;
    int yiJWin = 0, yiCWin = 0, yiBWin = 0;
    char jia, yi;
    for(i = 0; i < N; i++)
    {
        scanf(" %c %c", &jia, &yi);
        if(jia == 'C')
        {
            if(yi == 'C')
            {
                draw++;
            }
            else if(yi == 'J')
            {
                jiaWin++;
                jiaCWin++;
            }
            else if(yi == 'B')
            {
                jiaLose++;
                yiBWin++;
            }
        }
        else if(jia == 'J')
        {
            if(yi == 'C')
            {
                jiaLose++;
                yiCWin++;
            }
            else if(yi == 'J')
            {
                draw++;
            }
            else if(yi == 'B')
            {
                jiaWin++;
                jiaJWin++;
            }
        }
        else if(jia == 'B')
        {
            if(yi == 'C')
            {
                jiaWin++;
                jiaBWin++;
            }
            else if(yi == 'J')
            {
                jiaLose++;
                yiJWin++;
            }
            else if(yi == 'B')
            {
                draw++;
            }
        }
    }
    printf("%d %d %d\n", jiaWin, draw, jiaLose);
    //yiwin就是jialose
    printf("%d %d %d\n", jiaLose, draw, jiaWin);
    //利用三目运算符比较三种手势胜负平
    printf("%c ", jiaBWin >= jiaCWin ? (jiaBWin >= jiaJWin ? 'B' : 'J') : (jiaCWin >= jiaJWin ? 'C' : 'J'));
    printf("%c\n", yiBWin >= yiCWin ? (yiBWin >= yiJWin ? 'B' : 'J') : (yiCWin >= yiJWin ? 'C' : 'J'));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40597998/article/details/83512822