PAT1062_1011_1015

PAT 1062
PAT 1011
PAT 1015
 

PAT 1062 (25’)

一道给结构体排序的中规中矩的题目。
遇到的问题:

  • 审题,最后是按照序号的升序排列。
  • 运行超时:数据量大输入是使用scanf代替cout. 10^6的数据量,相差大概100ms。
  • 尽量别用指针。
  • AC的代码如下:
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int N, L, H;

typedef struct info{
    int s;
    int virtue;
    int talent;
    int total;
    
}person;

vector<person> sages;
vector<person> noblemen;
vector<person> foolmen;
vector<person> smallmen;

bool cmp(person x, person y){
    if (x.total != y.total) return x.total > y.total;
    else if (x.virtue != y.virtue) return x.virtue > y.virtue;
    else return x.s < y.s;
}

int main(){

//     cin >> N >> L >> H;
    scanf("%d %d %d", &N, &L, &H);
    for (int i = 0; i < N; i++){
        person pp;
//         cin >> pp.s >> pp.virtue >> pp.talent;
        scanf("%d %d %d", &pp.s, &pp.virtue, &pp.talent);
        pp.total = pp.virtue + pp.talent;
        if (pp.talent>=L && pp.virtue>=L){
            if (pp.talent>=H && pp.virtue>=H) sages.push_back(pp);
            else if (pp.talent<H && pp.virtue>=H) noblemen.push_back(pp);
            else if (pp.talent<H && pp.virtue<H && pp.talent<=pp.virtue) foolmen.push_back(pp);
            else smallmen.push_back(pp);
        }
    }
    cout << sages.size()+noblemen.size()+foolmen.size()+smallmen.size() << endl;

    sort(sages.begin(), sages.end(), cmp);
    sort(noblemen.begin(), noblemen.end(), cmp);
    sort(foolmen.begin(), foolmen.end(), cmp);
    sort(smallmen.begin(), smallmen.end(),cmp);

    for (int k = 0; k < (int)sages.size(); k++){
        cout << sages[k].s << " " << sages[k].virtue << " " << sages[k].talent << endl;
    }
    for (int k = 0; k < (int)noblemen.size(); k++){
        cout << noblemen[k].s << " " << noblemen[k].virtue << " " << noblemen[k].talent << endl;
    }
    for (int k = 0; k < (int)foolmen.size(); k++){
        cout << foolmen[k].s << " " << foolmen[k].virtue << " " << foolmen[k].talent << endl;
    }
    for (int k = 0; k < (int)smallmen.size(); k++){
        cout << smallmen[k].s << " " << smallmen[k].virtue << " " << smallmen[k].talent << endl;
    }

    return 0;
}

 

PAT 1063 (20’)
  • double类型的格式说明符为%lf.
#include<iostream>
#include<algorithm>

using namespace std;
const int maxn = 3;
double game[maxn][maxn];

int main(){

    for (int i = 0; i < 3; i++){
        scanf("%lf %lf %lf", &game[i][0], &game[i][1], &game[i][2]);
    }
    float res = 1;
    for (int j = 0; j < 3; j++){
        float tmp = game[j][0];
        char s = 'W';
        if (tmp < game[j][1]){
            tmp = game[j][1];
            s = 'T';
        }
        if (tmp < game[j][2]){
            tmp = game[j][2];
            s = 'L';
        }
        printf("%c ", s);
        res *= tmp;
    }
    printf("%.2lf\n", (res*0.65-1)*2);
    return 0;
}

 

PAT 1015 (20’)
  • 采用昨天使用的 素数表 判断数是否为素数较为简单。
  • radix 数的基,即进制数。
#include<iostream>

using namespace std;
const int maxn = 100010;
bool prime[maxn] = {0};

// 构造素数表
void prime_table(){
    prime[0] = true;
    prime[1] = true;
    for (int i = 2; i < maxn; i++){
        if (prime[i] == false){
            for (int j = i + i; j < maxn; j=j+i){
                prime[j] = true;
            }
        }
    }
}

int main(){
    int n, d;
    prime_table();
    while(scanf("%d", &n), n>=0){  // scanf("%d %d", &n, &d) == 2
        scanf("%d", &d);
        int n1 = 0;
        int tmp = n;
        while(tmp){
            n1 = n1*d + tmp%d;
            tmp = tmp/d;
        }
        if (prime[n] == false && prime[n1] == false)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值