1038 统计同成绩学生 (20 分)

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

输入在第 1 行给出不超过 105 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

样例:">输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0

代码:

#include<iostream>
using namespace std;
int main(){//设置score数组,通过成绩作为数组下标的方式检索人数int score[110] = {0}, person, temp;cin >> person;  //总人数for (int i = 0; i < person; i++){cin >> temp;score[temp]++;  //成绩对应的数组下标人数+1}cin >> person;  //检索成绩的个数for (int i = 0; i < person; i++){cin >> temp;//PAT特色输出,输出成绩对应下标的元素if (i != person - 1){cout << score[temp] << ' ';}else{cout << score[temp];}}return 0;
}

1039 到底买不买 (20 分)

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

输入格式:

每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。

输出格式:

如果可以买,则在一行中输出 Yes 以及有多少多余的珠子;如果不可以买,则在一行中输出 No 以及缺了多少珠子。其间以 1 个空格分隔。

输入样例 1:

ppRYYGrrYBR2258
YrR8RrY

输出样例 1:

Yes 8

输入样例 2:

ppRYYGrrYB225
YrR8RrY

输出样例 2:

No 2

 代码:

#include<iostream>
#include<string>
using namespace std;
int main() {string str1, str2;  //str1为摊主的珠子,str2为想要的珠子cin >> str1;//通过标记字符ASCII码的方式解决问题int colour[128] = { 0 }, len1 = str1.length(), temp = 0;//遍历str1数组,得到其字符元素的ASCII码,通过该ASCII码作为下标得到各字符出现频次for (int i = 0; i < len1; i++) {temp = str1[i];colour[temp]++;}cin >> str2;int len2 = str2.length();//遍历str1数组,得到其字符元素的ASCII码,在对应ASCII码下标的数组元素中减去其出现频次for (int i = 0; i < len2; i++) {temp = str2[i];colour[temp]--;}//通过yesOrNot标记是否满足需要bool yesOrNot = true;temp = 0;//遍历ASCII码数组,如果出现负数,则说明摊主的珠子不能满足需要,并且,累加差额for (int i = 0; i < 128; i++) {if (colour[i] < 0) {yesOrNot = false;temp -= colour[i];}}if (yesOrNot) {cout << "Yes " << len1 - len2;}else {cout << "No " << temp;}return 0;
}

1042 字符统计 (20 分)

请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

输入格式:

输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。

输出格式:

在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

输入样例:

This is a simple TEST.  There ARE numbers and other symbols 1&2&3...........

输出样例:

e 7

代码:

#include<iostream>
#include<string>
using namespace std;
int main(){string str;//不能使用cin >> str; 这种方式遇到空格就会停止输入getline(cin,str);int len = str.length(), count[130] = {0}, temp = 0;//遍历字符串for (int i = 0; i < len; i++){//如果碰到大写字母,则转换其为小写if (str[i] >= 'A' && str[i] <= 'Z'){str[i] += 32;}//统计每种小写字母出现的频次if (str[i] >= 'a' && str[i] <= 'z'){temp = str[i];count[temp]++;}}temp = -1;int max = -1;//遍历ASCII码数组,得到最高频次的小写字母及其出现频次for (int i = 0; i < 130; i++){if(count[i] > max){max = count[i];temp = i;}}char res = temp;cout << res << ' ' << max;return 0;
}

1043 输出PATest (20 分)

给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

redlesPayBestPATTopTeePHPereatitAPPT

输出样例:

PATestPATestPTetPTePePee

代码:

#include<iostream>
#include<string>
#define total 6
using namespace std;
//建立字符型数组,用于匹配得到次序
char sq[total] = {'P', 'A', 'T', 'e', 's', 't'};
//将字母转换为中"PATest"中的次序
int transferNum(char a){int rank = 0;//如果是"PATest"中的字母,则返回次序for (int i = 0; i < total; i++){if (sq[i] == a){rank = i;return rank;}}//如果不是,则统一返回totalreturn total;
}
int main(){string str;cin >> str;//arr数组的个数为total + 1int len = str.length(), temp, arr[total + 1] = { 0 };for (int i = 0; i < len; i++){temp = transferNum(str[i]);arr[temp]++;}int max = -1;//找到最多要输出几轮for (int i = 0; i < total; i++){if (arr[i] > max) max = arr[i];}for (int i = 0; i < max; i++){//按照sq字符数组的顺序按序输出for (int j = 0; j < total; j++){if (arr[j] > 0){cout << (sq[j]);}//每次循环当前字符个数-1arr[j]--;}}return 0;
}

1047 编程团体赛 (20 分)

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式:

输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出格式:

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例:

6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61

输出样例:

11 176

代码:

#include<iostream>
#include<string>
using namespace std;
int main() {int person, teamNum[1010] = { 0 }, len = 0, teamTemp = 0, temp = 0, score = 0, bestScore = -1, bestTeam = -1;cin >> person;//加getchar,防止getline将回车当成字符串getchar();string str;for (int i = 0; i < person; i++) {getline(cin, str);len = str.length();//取出字符串中的队伍编号for (teamTemp = 0, temp = 0; str[temp] != '-'; temp++) {teamTemp *= 10;teamTemp = teamTemp + str[temp] - '0';}//将temp向后推进到空格while (str[temp] != ' ') {temp++;}//取出字符串中的成绩for (score = 0, temp++; temp < len; temp++) {score *= 10;score = score + str[temp] - '0';}//累加当前队伍的成绩teamNum[teamTemp] += score;//判断当前队伍的成绩是否为最佳,如果为最佳,更新最佳队伍和最佳成绩if (teamNum[teamTemp] > bestScore) {bestTeam = teamTemp;bestScore = teamNum[teamTemp];}}cout << bestTeam << ' ' << bestScore;return 0;
}

1005 继续(3n+1)猜想 (25 分)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:

每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。

输出格式:

每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。

输入样例:

6
3 5 6 7 8 11

输出样例:

7 6

代码:

#include<iostream>
using namespace std;
int main() {//number数组用来标记输入的数据,tempNum数组用来标记每个输入数据到1的计算中间值int count, number[120] = { 0 }, tempNum[120] = { 0 }, temp = 0, max = -1;cin >> count;//循环输入count个数据for (int i = 0; i < count; i++) {cin >> temp;//输入数据后,在number数组的对应下标+1number[temp]++;//判断当前已输入数据的最大值if (temp > max) max = temp;while (temp != 1) {//对其进行奇数偶数判断并进行相应操作if (temp % 2 == 0) {temp /= 2;}else {temp = (temp * 3 + 1) / 2;}//如果当前的数字小于110,则存入相应的中间值数组下标元素中if (temp <= 110) tempNum[temp]++;}}//将count归零,用于记录一共需要输出几个数据count = 0;//如果当前下标的值是输入的,并且是中间值,则count+1for (int i = max; i > 0; i--) {if (number[i] != 0 && tempNum[i] == 0) {count++;}}//PAT特色输出for (int i = max; i > 0; i--) {if (number[i] != 0 && tempNum[i] == 0) {if (count > 1) {cout << i << " ";count--;}else cout << i;}}return 0;
}

PAT乙级(散列) 1038、1039、1042、1043、1047、1005相关推荐

  1. Pat乙级 1038 统计同成绩学生

    Pat乙级1038统计同成绩学生 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/9948052840928 ...

  2. 【PAT笔记】PAT中的散列思想

    散列的介绍 散列(hash)是常用的算法思想之一,在很多程序上都会有意无意的使用到.用一句话来概括散列思想的话就是:"将元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素&qu ...

  3. PAT练习笔记——4.2 散列

    2019年9月PAT - 练习笔记--4.2 以下页码标注的是阅读器中实际页码,而不是书本身自印的页码. 第4章 入门篇(2)--算法初步 4.2 散列 注意 注意题目中是否隐含输入字符串可能为空的条 ...

  4. 适合初步练习PAT乙级——(1039) 到底买不买

    适合初步练习PAT乙级--(1039) 到底买不买 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全 ...

  5. 1043 输出PATest(PAT乙级 C++)

    题目 给定一个长度不超过 10​4的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest- 这样的顺序输出,并忽略其它字符.当然,六种字符的个数不一定是一样多的,若某种字符已 ...

  6. 1039 到底买不买(pat乙级、C++)

    题目 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余 ...

  7. 1042 字符统计(PAT乙级、C++)(超详细)

    题目 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文 ...

  8. PAT乙级 1038 统计同成绩学生 C++)

    题目 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10​5的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空 ...

  9. PAT乙级题目对应知识点分类梳理例程(更新至1102)

    PAT乙级题目对应知识点分类梳理 PAT乙级的90道题的知识点与对应的题号整理如下,便于做专项练习和巩固! 题型 备注 1.字符串函数 考察字符串相关知识,如逆转.字母与数字的判断与转化.字符串拼接. ...

  10. 【最新合集】PAT乙级最优题解(题解+解析+代码)

    以下每道题均是笔者多方对比后, 思考整理得到的最优代码,欢迎交流! pat乙级题解目录 编号 标题 题解 分类 1001 害死人不偿命的(3n+1)猜想 (15分) 9行代码AC 水 1002 写出这 ...

最新文章

  1. 让你完全理解base64是怎么回事
  2. java时钟面板clock
  3. 韦恩图——帮助你更好地表达多个数据集合之间的相交关系
  4. hdu 6579 Operation (在线线性基)
  5. python opencv 识别角度_OpenCV入门之获取图像的旋转角度
  6. FreeRTOS源码分析与应用开发10:内存管理
  7. 表单元素值获取方式js及java方式
  8. 加入商品分类信息,考虑用户所处阶段的 图模型 推荐算法 Rws(random walk with stage)...
  9. 给妹子讲python_给妹子讲python-S01E01好用的列表
  10. Octapharma宣布,Nuwiq(R) (simoctocog alfa)用于既往未曾治疗的患者(PUP)的NuProtect研究的最终结果将在ASH 2019上呈报
  11. linux查看程序bss段,[必须掌握].bss段和.data段的区别
  12. CSS之transform的translate平移属性【2D】(一)
  13. 设计模式之建造者和原型模式
  14. 强化学习七日打卡营终极复现之flappy bird
  15. Docker 书籍在线阅读(Docker 从入门到实践)
  16. 在Fedora 14下安装yong输入法
  17. 商场管理系统毕业设计
  18. 如何开启 vue 项目
  19. 【Cocos2d-X开发学习笔记】第15期:动作类之摄像机动作和基本样条动作的使用
  20. 了解MySQL,走进他的心

热门文章

  1. MySQL 事务详解
  2. 移动开发已进入 App 工厂时代!
  3. 2020年有寓意的领证日期_2020年适合领结婚证的日子-2020寓意好的领证吉日-蜜匠婚礼...
  4. Python学习的第十三天:第二周总结
  5. 抖音涨粉太难?抖音矩阵了解一下!丨国仁网络
  6. java rowmapper 通用实现_java-在RowMapper中使用查询
  7. 【青书学堂】计算机应用基础(高起专) 第一学期 作业
  8. 人为什么而工作?(讨论)
  9. EXCEL表格处理集合
  10. 儿童用的护眼台灯什么牌子好?儿童防近视护眼灯排行榜