PAT (Basic Level) Practice (中文)刷题6

这篇博客详细解析了PAT基础级别中的六道题目,包括1060爱丁顿数、1061判断题、1064朋友数、1065单身狗、1076Wifi密码。博主提供了每道题的思路和相应的代码实现,旨在帮助读者理解和解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目详情:


1060 爱丁顿数 (25 分)

描述:
在这里插入图片描述
思路:

将输入的数存储到数组中,将数组翻转,遍历数组,判断是否满足有 E 天骑车超过 E 英里。

代码:

#include <iostream>
#include <algorithm>
using namespace std;

int a[100010];

bool cmp(int a, int b) {
    return a > b;
}
int main() {
    int n;

    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];

    sort(a+1, a+n+1, cmp);

    int E = 0, p = 1;
    while(E <= n && a[p] > p) {
        E++;
        p++;
    }
    cout << E;

	system("pause");
    return 0;
}

1061 判断题 (15 分)

描述:
在这里插入图片描述
思路:

一个数组存储判断题的分数,一个数组存储判断题的正确答案。

代码:

#include<iostream>
#include<cstdio>
using namespace std;

int ans[101], score[101];

int main(){
	int n, m, temp;

	cin >> n >> m;
	for(int i = 0; i < m; i++)
        cin >> score[i];
    for(int i = 0; i < m; i++)
        cin >> ans[i];
	for(int i = 0; i < n; i++) {
        int total = 0;
        for(int j = 0; j < m; j++) {
            cin >> temp;
            if(temp == ans[j]) total += score[j];
        }
        cout << total << endl;
    }

	system("pause");
	return 0;
}

1064 朋友数 (20 分)

描述:

在这里插入图片描述

思路:

输入的数小于10的4次方,所以最大的朋友数为36,定义一个数组用于判断朋友数是否存在。
将输入数的每一位相加,存储到对应下标的数组中。

代码:

#include <iostream>
#include <cstdio>
using namespace std;

int id[40];

int main(){
	int n, count = 0, flag = 0;
	cin >> n;
	int temp, c;
	for(int i = 0; i < n; i++){
		cin >> temp;
		int sum = 0;
		while(temp){
			sum += temp % 10;
			temp /= 10;
		}
		id[sum]++;
		if(id[sum] == 1) count++;
	}

	cout << count << endl;
	for(int i = 0; i < sizeof(id) / sizeof(id[0]); i++){
		if(id[i] != 0 && flag == 0) { cout << i; flag++; }
		else if(id[i] != 0 && flag != 0) cout << " " << i;
	}

	system("pause");
	return 0;
}

1065 单身狗 (25 分)

描述:

在这里插入图片描述
思路:

定义可变长的couple数组(初值为-1),将给出的夫妻对存储到couple中,例如:输入的为a b,则将couple[a] = b; couple[b] = a;
定义guest数组和isExist数组,对couple[guest]进行判断:是否为 -1,不为则表示guest到了这场派对,最后输出isExist[guest]为0的客人编号。

代码:

#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
    int n, a, b, m;
    scanf("%d", &n);
    vector<int> couple(100000, -1);
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &a, &b);
        couple[a] = b;
        couple[b] = a;
    }
    scanf("%d", &m);
    vector<int> guest(m), isExist(100000);
    for (int i = 0; i < m; i++) {
        scanf("%d", &guest[i]);
        if (couple[guest[i]] != -1)
            isExist[couple[guest[i]]] = 1;
    }
    set<int> s;
    for (int i = 0; i < m; i++) {
        if (!isExist[guest[i]])
            s.insert(guest[i]);
    }
    printf("%d\n", s.size());
    for (auto it = s.begin(); it != s.end(); it++) {
        if (it != s.begin()) printf(" ");
        printf("%05d", *it);
    }
    return 0;
}

1076 Wifi密码 (15 分)

描述:

下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。

思路:

输出:输入的字符串s的 s[2]是为T的 s[0]

代码:

#include<iostream>
using namespace std;

int main(){
	string s;
    
	while(cin>>s){
		if(s[2]=='T'){
			if(s[0]=='A')cout<<1;
			if(s[0]=='B')cout<<2;
			if(s[0]=='C')cout<<3;
			if(s[0]=='D')cout<<4;
		}
	}
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值