PAT乙级题解1011-1015

1011 A+B 和 C

注意数的范围即可

#include <stdio.h>

int main()
{
    int t, num = 1;
    long long a, b, c;
    scanf("%d", &t);
    while (t-->0) {
        scanf("%lld%lld%lld", &a, &b, &c);
        printf("Case #%d: %s\n", num++, a + b > c ? "true" : "false");
    }
    return 0;
}

1012 数字分类

思路捋清楚即可,想不来就把每种情况列下来

#include<stdio.h>

int main()
{
    int n, curr;
    int a1 = 0;
    int a2 = 0, signA2 = 0, sign = 0;  //a2 可能为0 所以不能作为是否存在的标准
    int a3 = 0;
    float a4 = 0;
    int countA4 = 0;
    int a5 = 0;
    scanf("%d", &n);
    while (n-->0) {
        scanf("%d", &curr);
        /*----A1---- */
        if (curr % 10 == 0) a1 += curr;

        /*----A2---- */
        if (curr % 5 == 1) {
            a2 = signA2 ? a2 - curr : a2 + curr;
            signA2 = !signA2;
            sign = 1;
        }

        /*----A3---- */
        if (curr % 5 == 2) a3++;

        /*----A4---- */
        if (curr % 5 == 3) {
            a4 += curr;
            countA4++;
        }

        /*----A5---- */
        if (curr % 5 == 4 && curr > a5) a5 = curr;
    }
    if (a1 == 0)
        printf("N ");
    else
        printf("%d ", a1);
    if (sign == 0)
        printf("N ");
    else
        printf("%d ", a2);
    if (a3 == 0)
        printf("N ");
    else
        printf("%d ", a3);
    if (countA4 == 0)
        printf("N ");
    else
        printf("%.1lf ", a4 / countA4);
    if (a5 == 0)
        printf("N\n");
    else
        printf("%d\n", a5);
    return 0;
}

1013 数素数

筛法求素数

#include<stdio.h>
#include<string.h>

#define MAX (int)1e6

int primeList[MAX];
int newPList[10005];

void init_primeList()
{
    memset(primeList, 1, sizeof(primeList));
    primeList[0] = primeList[1] = 0;
    for (int i = 2; i < MAX; i++) {
        if (primeList[i] == 0) continue;
        for (int j = 2 * i; j < MAX; j += i)
            primeList[j] = 0;
    }
}

void tranIndex()
{
    int index = 1;
    for (int i = 2; i < MAX && index < 10005; i++)
        if (primeList[i])
            newPList[index++] = i; 
}

int main()
{
    int m, n;
    scanf("%d%d", &m, &n);
    init_primeList();
    tranIndex();
    int sign = 0;
    for (int i = m; i <= n; i++) {
        sign++;
        if (sign % 10 == 1)
            printf("%d", newPList[i]);
        else if (sign % 10 == 0)
            printf(" %d\n", newPList[i]);
        else
            printf(" %d", newPList[i]);
    }
    return 0;
}

1014 福尔摩斯的约会

要细心!要细心!要细心!

这个题错误的次数很多1

#include<stdio.h>
#include<string.h>

#define MAX 65

int main()
{
    char s[][5] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
    char s1[MAX], s2[MAX], s3[MAX], s4[MAX];
    int day, hh, mm = 0, sign = 0;
    scanf("%s%s%s%s", s1, s2, s3, s4);
    for (int i = 0; s1[i] != 0 && s2[i] != 0; i++) {
        if (sign == 0  && s1[i] == s2[i] && (s1[i] >= 'A' && s1[i] <= 'G')) {
            day = s1[i] - 'A';
            printf("%s ", s[day]);
            sign = 1;
            i++;
        } 
        if (sign && s1[i] == s2[i]) {
            if (s1[i] >= 'A' && s1[i] <= 'N') {
                hh = 10 + s1[i] - 'A';
                printf("%d", hh);
                break;
            }
            if (s1[i] >= '0' && s1[i] <= '9') {
                hh = s1[i] - '0'; 
                printf("%02d", hh);
                break; 
            }
        }
    }
    for (int i = 0; s3[i] != 0 && s4[i] != 0; i++) {
        if (s3[i] == s4[i] && ((s3[i] >= 'a' && s3[i] <= 'z') ||
                               (s3[i] >= 'A' && s3[i] <='Z')))
            break;
        mm++;
    }
    printf(":%02d\n", mm);
    return 0;
}

1015 德才论

将每种情况列出来,利用qsort排序即可。

/*
* input: N L H
        准考证号 德分 才分
* 分类:  得分 D   才分 C   
*       组内总分排序 当某类考生中有多人总分相同时,按其德分降序排列;
*       若德分也并列,则按准考证号的升序输出。
*    第一类: D,C >= H                      
*    第二类: D >= H, H > C >= L            
*    第三类: L <= D,C <= H 且 D >= C        
*    第四类:  L <= D,C <= H 且 D < C 
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX (int)1e5+5

typedef struct {
    char id[10];
    int  ds;
    int  cs;
}InfoScore;

InfoScore first[MAX], secode[MAX], third[MAX], forth[MAX];
int first_num, secode_num, third_num, forth_num;

void copy(InfoScore *a, InfoScore b)
{
    strcpy(a->id, b.id);
    a->ds = b.ds;
    a->cs = b.cs;
}

int cmp(const void *a, const void *b)
{
    InfoScore *ai = (InfoScore *)a;
    InfoScore *bi = (InfoScore *)b;
    if ((ai->ds + ai->cs) != (bi->ds + bi->cs))
        return (bi->ds + bi->cs) - (ai->ds + ai->cs) ;
    else if (ai->ds != bi->ds)
        return bi->ds - ai->ds;
    else 
        return atoi(ai->id) - atoi(bi->id);
}

void print(InfoScore *a, int len)
{
    for (int i = 0; i < len; i++)
        printf("%s %d %d\n", a[i].id, a[i].ds, a[i].cs);  
}

int main()
{
    int n, l, h, sum = 0;
    InfoScore tmp;
    scanf("%d%d%d", &n, &l, &h);

    while (n-->0) {
        scanf("%s%d%d", tmp.id, &tmp.ds, &tmp.cs);
        sum++;
        if (tmp.ds >= h && tmp.cs >= h) {
            copy(&first[first_num], tmp);
            first_num++;
        } else if (tmp.ds >= h && tmp.cs >= l) {
            copy(&secode[secode_num], tmp);
            secode_num++;
        } else if (tmp.ds >= l && tmp.cs >= l && tmp.ds >= tmp.cs) {
            copy(&third[third_num], tmp);
            third_num++;
        } else if (tmp.ds >= l && tmp.cs >= l) {
            copy(&forth[forth_num], tmp);
            forth_num++;
        } else
            sum--;  
    }

    qsort(first, first_num, sizeof(InfoScore), cmp);
    qsort(secode, secode_num, sizeof(InfoScore), cmp);
    qsort(third, third_num, sizeof(InfoScore), cmp);
    qsort(forth, forth_num, sizeof(InfoScore), cmp);

    printf("%d\n", sum);
    print(first, first_num);
    print(secode, secode_num);
    print(third, third_num);
    print(forth, forth_num);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值