7-1 2019数列 (15分)

7-2 老鼠爱大米 (20分)

7-3 String复读机 (20分)

7-4 擅长C (20分)

7-5 区块反转 (25分)


7-1 2019数列 (15分)

把 2019 各个数位上的数字 2、0、1、9 作为一个数列的前 4 项,用它们去构造一个无穷数列,其中第 n(>4)项是它前 4 项之和的个位数字。例如第 5 项为 2, 因为 2+0+1+9=12,个位数是 2。

本题就请你编写程序,列出这个序列的前 n 项。

输入格式:
输入给出正整数 n(≤1000)。

输出格式:
在一行中输出数列的前 n 项,数字间不要有空格。

输入样例:

10

输出样例:

2019224758

思路: 还蛮简单的,需要注意的是输入的n是否大于4.

#include <iostream>
using namespace std;int main()
{int n, num[1010], sum = 0;num[0] = 2;    //第一个数num[1] = 0;  //第二个数num[2] = 1;  //第三个数num[3] = 9;  //第四个数cin >>n;for(int i=4; i<n; i++){sum = 0;for(int j=i-4; j<i; j++)    //给第i为赋值sum += num[j];num[i] = sum%10;}for(int i=0; i<n; i++)  //输出cout <<num[i];return 0;
}

7-2 老鼠爱大米 (20分)
翁恺老师曾经设计过一款 Java 挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用 Java 代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。

因为游戏时间不能太长,我们把玩家分成 N 组,每组 M 只老鼠同场竞技,然后从 N 个分组冠军中直接选出最胖的冠军胖胖鼠。现在就请你写个程序来得到冠军的体重。

输入格式:
输入在第一行中给出 2 个正整数:N(≤100)为组数,M(≤10)为每组玩家个数。随后 N 行,每行给出一组玩家控制的 M 只老鼠最后的体重,均为不超过 104的非负整数。数字间以空格分隔。

输出格式:
首先在第一行顺次输出各组冠军的体重,数字间以 1 个空格分隔,行首尾不得有多余空格。随后在第二行输出冠军胖胖鼠的体重。

输入样例:

3 5
62 53 88 72 81
12 31 9 0 2
91 42 39 6 48

输出样例:

88 31 91
91

思路: 用一个vector存放每组输入的数,再用一个vector存放每组数里最大的数。在输入每组数后对该数组进行从大到小排序,当前数组的第一个数即是最大的数,再将该最大的数存入另一个vector中。当所有数组输入完后,对存放最大的数的vector按从大到小排序,输出第一个数。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;bool cmp(int a, int b){return a > b;
}int main()
{int n, m, x;cin >>n>>m;vector<int> v, v_ans; //v存放每组数,v_ans存放每组数里最大的数for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin >>x;v.push_back(x);}sort(v.begin(), v.end(), cmp);   //从大到小排序v_ans.push_back(v[0]);  //该数是当前数组里最大的printf("%s%d", i == 0 ? "" : " ", v[0]);v.clear(); //清空}sort(v_ans.begin(), v_ans.end(), cmp); //从大到小排序printf("\n%d", v_ans[0]); //输出最大的数return 0;
}

7-3 String复读机 (20分)
给定一个长度不超过 104的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString… (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 gnirtSSs 要调整成 StringS 输出,其中 s 是多余字符被忽略。

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

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

输入样例:

sTRidlinSayBingStrropriiSHSiRiagIgtSSr

输出样例:

StringStringSrigSriSiSii

思路: 用一个数组存放String字符串中每个字符出现的次数,输出一行字符串后,统计每个字符的个数,然后按String的形式输出字符,同时没输出一个字符就将搞字符个数减一,知道每个字符的个数都为0就结束输出。

#include <iostream>
#include <string>
using namespace std;bool isEmpty(int a[]){  //判断该数组的元素是否都为0for(int i=0; i<6; i++)if(a[i] != 0) return false;return true;
}int main()
{string s, str = "String";cin >>s;int cntCh[6] = {0}, idx = 0;for(int i=0; i<s.size(); i++)if(str.find(s[i]) != string::npos) //统计字符cntCh[str.find(s[i])]++;    while(!isEmpty(cntCh)){     //如果数组里的元素都不为0则循环if(cntCh[idx] != 0){  //如果该字符数不为0则输出printf("%c", str[idx]);cntCh[idx]--;}idx++;if(idx == 6) idx = 0;   //到最大长度了,从头再来}return 0;
}

7-4 擅长C (20分)
当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗?

输入格式:
输入首先给出 26 个英文大写字母 A-Z,每个字母用一个 7×5 的、由 C 和 . 组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由若干个单词(每个包含不超过 10 个连续的大写英文字母)组成的,单词间以任何非大写英文字母分隔。

题目保证至少给出一个单词。

输出格式:
对每个单词,将其每个字母用矩阵形式在一行中输出,字母间有一列空格分隔。单词的首尾不得有多余空格。

相邻的两个单词间必须有一空行分隔。输出的首尾不得有多余空行。

输入样例:

..C..
.C.C.
C...C
CCCCC
C...C
C...C
C...C
CCCC.
C...C
C...C
CCCC.
C...C
C...C
CCCC.
.CCC.
C...C
C....
C....
C....
C...C
.CCC.
CCCC.
C...C
C...C
C...C
C...C
C...C
CCCC.
CCCCC
C....
C....
CCCC.
C....
C....
CCCCC
CCCCC
C....
C....
CCCC.
C....
C....
C....
CCCC.
C...C
C....
C.CCC
C...C
C...C
CCCC.
C...C
C...C
C...C
CCCCC
C...C
C...C
C...C
CCCCC
..C..
..C..
..C..
..C..
..C..
CCCCC
CCCCC
....C
....C
....C
....C
C...C
.CCC.
C...C
C..C.
C.C..
CC...
C.C..
C..C.
C...C
C....
C....
C....
C....
C....
C....
CCCCC
C...C
C...C
CC.CC
C.C.C
C...C
C...C
C...C
C...C
C...C
CC..C
C.C.C
C..CC
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.CCC.
CCCC.
C...C
C...C
CCCC.
C....
C....
C....
.CCC.
C...C
C...C
C...C
C.C.C
C..CC
.CCC.
CCCC.
C...C
CCCC.
CC...
C.C..
C..C.
C...C
.CCC.
C...C
C....
.CCC.
....C
C...C
.CCC.
CCCCC
..C..
..C..
..C..
..C..
..C..
..C..
C...C
C...C
C...C
C...C
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.C.C.
..C..
C...C
C...C
C...C
C.C.C
CC.CC
C...C
C...C
C...C
C...C
.C.C.
..C..
.C.C.
C...C
C...C
C...C
C...C
.C.C.
..C..
..C..
..C..
..C..
CCCCC
....C
...C.
..C..
.C...
C....
CCCCC
HELLO~WORLD!

输出样例:

C...C CCCCC C.... C.... .CCC.
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
CCCCC CCCC. C.... C.... C...C
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
C...C CCCCC CCCCC CCCCC .CCC.C...C .CCC. CCCC. C.... CCCC.
C...C C...C C...C C.... C...C
C...C C...C CCCC. C.... C...C
C.C.C C...C CC... C.... C...C
CC.CC C...C C.C.. C.... C...C
C...C C...C C..C. C.... C...C
C...C .CCC. C...C CCCCC CCCC.

思路: 不要被吓住,其实不难,就是处理起来有点麻烦~我第一次考pat乙级考的就是这套卷,永远记得当时过了一个多小时后我查看排名,有几个100分的,当时觉得他们是怪物。。。太厉害了,其实说到底是当时我特别菜。报了大后天的乙级,希望可以白嫖一个徽章。
说说思路吧,首先有一个需要注意的地方,输入要用getline,因为输入的字符串里可能有空格。用一个二维字符串存放每个字母,再用一个字符串型的vector存放单词,把题目分解一下,获取单词,将单词里的每个字符拼成完整的单词,注意最后一个单词不要换行输出。具体代码如下。

#include <iostream>
#include <vector>
#include <string>
using namespace std;int main()
{string letter[26][7], content;int i, j;vector<string> word;  //存放单词for(i=0; i<26; i++)for(j=0; j<7; j++)getline(cin, letter[i][j]);getline(cin, content);    //输入用getlinefor(i=0; i<content.size(); i++){string s;if(isupper(content[i])){ //如果当前字符是大写字母for(j=i; isupper(content[j]); j++)  //获取它s.push_back(content[j]);i+= (j-i)-1; //更新i的位置word.push_back(s);  //将它放入word中}}   for(i=0; i<word.size(); i++){ //输出单词string print[7] = {"", "", "", "", "", "", ""};for(j=0; j<word[i].size(); j++){  //将单词里的字符拼成完整的单词for(int k=0; k<7; k++){if(j!=word[i].size()-1) print[k] += letter[word[i][j] - 'A'][k] + " ";      else print[k] += letter[word[i][j] - 'A'][k];}}for(j=0; j<7; j++) cout <<print[j]<<endl;if(i != word.size()-1) cout <<endl;   //最后一个单词不换行}return 0;
}

7-5 区块反转 (25分)
给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3。

输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (≤N),即区块的大小。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。

接下来有 N 行,每行格式为:

Address Data Next

其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 8 3
71120 7 88666
00000 4 99999
00100 1 12309
68237 6 71120
33218 3 00000
99999 5 68237
88666 8 -1
12309 2 33218

输出样例:

71120 7 88666
88666 8 00000
00000 4 99999
99999 5 68237
68237 6 00100
00100 1 12309
12309 2 33218
33218 3 -1

思路: 静态链表,用一个结构体数组模拟链表,注意输入的链表不完全有效,即存在孤儿结点。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;struct Node{int address, data, next;
}node[100000];int main()
{int first, n, k, address, i, j;cin >>first>>n>>k;for(i=0; i<n; i++){scanf("%d", &address);scanf("%d%d", &node[address].data, &node[address].next);node[address].address = address;}vector<Node> v, v_ans;for(i=first; node[i].next != -1; i=node[i].next) v.push_back(node[i]);v.push_back(node[i]);for(i=v.size()/k; i>=0; i--)for(j=i*k; j<v.size()&&j<i*k+k; j++)v_ans.push_back(v[j]);for(i=0; i<v_ans.size(); i++){if(i == v_ans.size()-1) printf("%05d %d -1", v_ans[i].address, v_ans[i].data);else printf("%05d %d %05d\n", v_ans[i].address, v_ans[i].data, v_ans[i+1].address);}return 0;
}

PAT(乙级)2019年冬季考试【答案+题解】相关推荐

  1. pat甲级考试报名费_PAT(甲级)2019年冬季考试 题解

    总结写在前头: 考了字符串.链表(伪链表).图.树.考点比较均衡. 本次考试难度还行,需要较扎实的数据结构底子,对于字符串处理的技巧有一定的要求. 说句题外话,字符串是个重点,主要因为很多人会忽视字符 ...

  2. PAT(甲级)2019年冬季考试 7-2 Block Reversing

    这题是做过的,B1025,我还总结过,果然早晚复相逢,只改了一点点,见1025 反转链表. 点睛之笔是结构体数组的哈希,地址既做下标,又有实际含义,妙啊. node[add].add = add; 当 ...

  3. PAT(甲级)2019年冬季考试 7-4 Cartesian Tree

    这道题利用的是最小堆和中序排序的属性:只要知道根节点,就能得出哪些属于左子树,哪些属于右子树. 开始我一直报段错误,经过筛查,发现是创建树的函数忘记写返回语句 return root. AC代码 #i ...

  4. PAT(甲级)2019年冬季考试7-1 Good in C (20 分)

    7-1 Good in C (20 分) When your interviewer asks you to write "Hello World" using C, can yo ...

  5. PAT甲级 2019年冬季 题解

    题目1:7-1 Good in C (20分) When your interviewer asks you to write "Hello World" using C, can ...

  6. 【PAT】2021年冬季考试甲级,摸鱼游记、92分

    T1,简单模拟,20/20分 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+10; int a[max ...

  7. 【2019年秋PAT乙级考试】回顾 +题解+思路2019-9-8

    刚上大二第一次考乙级,数据结构学了链表.95道题刷完了...考试的确是答得快了,但是分数还是~~~~~ 四道题四十分钟左右做完提交都是一遍过(平常刷题,交20 30次~~~才能补完全部测试点卡的漏洞. ...

  8. 2021年冬季PAT乙级题解(C/C++语言)

    2021年冬季PAT乙级题解(C/C++语言) 7-1 自动打包机 (15 分) 原题 算法标签 模拟 代码 #include<bits/stdc++.h> #define int lon ...

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

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

最新文章

  1. MyBatis复习笔记2:配置文件详解
  2. 看完你也想编写自己的 react 插件
  3. T-SQL中的随机数
  4. [转载]全金属外壳——坦克遥控高射机枪
  5. para1、para2与**kw
  6. 经典问题:向setTimeout传递函数参数
  7. 开源 展uv_消费电子展上的开源,印度被封锁的网站等等
  8. 没有5G也很香!iPhone去年四季度出货量了解下
  9. 校招刷题---java选择题笔记02
  10. or1200处理器的异常处理类指令介绍
  11. macbook pro开机键盘键盘和触摸板没反应问题
  12. php:两个文件夹递归地比较,没有的文件自动复制过去
  13. engineercms整合mindoc
  14. 金蝶K3 运行时错误'429' ActiveX部件不能创建对象
  15. 注塑模具设计的技术知识汇总
  16. 哈耶克《感觉的秩序》导读
  17. JAVA程序员必看的15本书-JAVA自学书籍推荐(转)
  18. javascript英语单词音节拆分_英语启蒙:自然拼读之单词合成与分割
  19. 怎么样可以批量下载网页图片?
  20. Tableau 网站流量分析案例之浏览量分析(二)

热门文章

  1. 带有对话的整人html,整人语言陷阱
  2. 基于CH568芯片加密SD卡方案
  3. WINUI3开发笔记 生成提示This version of Project Reunion requires WinRT.Runtime.dll version 1.3 or
  4. C++ 无法打开源文件windows.h
  5. 企业做网络营销的步骤有哪些呢?
  6. 自定义指令简介及用法
  7. 莫把“李鬼”当成“李逵”,警惕元宇宙、区块链网络陷阱
  8. SVG实现带动画效果的购物图标
  9. PDF编辑软件如何跟PDF添加水印相结合
  10. MATLAB中的Prony Toolbox工具箱简介