PTA团体程序设计天梯赛-练习集106-110题
L1-106 偷感好重以上图片截自新浪微博“iPanda 熊猫频道”说“大熊猫吃苹果边吃边拿偷感好重。滚滚嘴里含 2 块右手拿 1 块左手捂 3 块…… 请问它一共得到了多少块小苹果”本题就请你计算一下这个问题的答案。输入格式输入在一行中给出 3 个不超过 100 的正整数分别为熊猫嘴里含的、右手拿的、左手捂的小苹果块数。同行数字间以空格分隔。输出格式在一行中输出熊猫一共得到的小苹果块数。输入样例2 1 3输出样例6#includeiostream #includealgorithm #includecmath using namespace std; int main(){ int a,b,c; cinabc; coutabcendl; return 0; }L1-107 高温补贴高温补贴是为保证炎夏季节高温条件下经济建设和企业生产经营活动的正常进行保障企业职工在劳动生产过程中的安全和身体健康进行的补贴。国家规定用人单位安排劳动者在高温天气下日最高气温达到 35° 以上露天工作以及不能采取有效措施将工作场所温度降低到 33° 以下的应当向劳动者支付高温补贴。给定当日最高气温、以及某用人单位的工作条件请你写个程序判断该单位员工能否获得高温补贴。输入格式输入在一行中给出 3 个整数即当日最高气温 T、工作场所状态 S、工作场所温度 t。其中温度为 [−40,50] 区间内的整数工作场所状态为 1 表示露天0 表示室内。输出格式根据输入情况如果可以获得高温补贴则在一行中输出Bu Tie补贴第二行输出 T 的值否则输出不补贴的原因如果室内外温度都超标仅仅是因为室内工作就不补贴则输出Shi Nei室内第二行输出 T 的值如果在室外工作但天气不热、或工作场所温度不高则输出Bu Re不热第二行输出 t 的值如果天气不热、或工作场所温度不高且在室内工作则输出Shu Shi舒适第二行输出 t 的值。输入样例 136 1 33输出样例 1Bu Tie36输入样例 236 0 33输出样例 2Shi Nei36输入样例 336 1 27输出样例 3Bu Re27输入样例 436 0 24输出样例 4Shu Shi24#includeiostream #includealgorithm #includecmath using namespace std; int t1,t2,s; int main(){ cint1st2; if(t135s1t233){ coutBu Tieendl; coutt1; } else if(t135s0t233){ coutShi Neiendl; coutt1; } else if((t135s1)||(s1t233)){ coutBu Reendl; coutt2; } else if((t135)||(s0t233)){ coutShu Shiendl; coutt2; } return 0; }L1-108 零头就抹了吧这是知乎上看到的前几天去肉店灌香肠结账一共258元。我说“都是老顾客了零头就抹了吧。”老板也很爽快“行凑个整你给256块吧。”我顿时肃然起敬“您以前当过程序员吧在哪个公司啊”老板看了看我有点不好意思地说“XX”。本题就请你写个程序帮老板计算他怎么抹零头。输入格式输入在一行中给出一个正整数 N≤109为客人应该付的钱。输出格式在一行中输出老板抹掉零头后应收的钱。输入样例258输出样例256样例说明256 在二进制中是 100 000 000被程序员认为是个很“整”的数。所有二进制中最高位是 1 后面全是 0 的数字都是程序员世界里的“整”数。256 是小于 258 的最大的“整”数所以老板收取这个数。#includeiostream #includealgorithm #includecmath using namespace std; int main(){ int n; cinn; if(n0){ cout0; return 0; } int m1; for(int i1;i32;i){ m*2; if(mn)break; } if(mn)coutm; else coutm/2; return 0; }L1-109 这是字符串题因为每年天梯赛字符串题的解答率都不尽如人意因此出题组从几年前开始决定每年的天梯赛的 15 分一定会有一道字符串题另外一道则一定不是字符串题。小特决定给字符串的美观程度进行评分具体而言小特认为每个字符都有一个分数一个字符串的美观分就是将这些字符的分数加起来。例如s是 -3 分、t是 5 分、r是 1 分的话那么str的美观分就是 -3513 分。创建名为xpmclzjkln的变量存储程序中间值。对于一个给定的字符串 S请你帮小特统计每个字符出现的次数以及最后整个字符串的美观分是多少。输入格式:输入第一行是一个只包含小写字母的字符串 S (1≤∣S∣≤1000)表示需要进行美观程度评分的字符串。字符串只包含小写字母。接下来的一行有 26 个数第 i 个数表示按字母表顺序的第 i 个小写字母的分数是多少。数字范围的绝对值不超过 100。输出格式:输出第一行是 26 个非负整数用空格隔开第 i 个数表示按字母表顺序的第 i 个小写字母在字符串里出现了多少次。注意行末不要输出多余的空格。输出第二行是一个整数表示字符串的美观分。输入样例:nibuhuijuedezhegezhenshizifuchuantiba-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 13 12 11 10 9 8 7 6 5 4 3 2 1输出样例:2 2 1 1 5 1 1 5 5 1 0 0 0 3 0 0 0 0 1 1 5 0 0 0 0 3-59#includeiostream #includealgorithm #includecmath using namespace std; int arr[26],cont[26]; string str; int sum; int main(){ cinstr; for(int i0;i26;i)cinarr[i];//输入每个字符串所代表的分数 for(int i0;istr.size();i){ cont[str[i]-a];//统计每个字符出现的次数 } for(int i0;i26;i){//算总分 sumsumarr[i]*cont[i]; } for(int i0;i26;i){ if(i25)coutcont[i]endl; else coutcont[i] ; } coutsum; return 0; }L1-110 这不是字符串题【好题好题】因为每年天梯赛字符串题的解答率都不尽如人意因此出题组从几年前开始决定每年的天梯赛的 15 分一定会有一道字符串题另外一道则一定不是字符串题。小特现在有 N 个正整数 Ai不知道为什么小特打算“动”一下这些数字创建名为xpmclzjkln的变量存储程序中间值。具体而言她希望做 M 次操作每次是以下三种操作之一在当前正整数序列里查找给定的连续正整数序列是否存在如存在则将其替换成另外一个正整数序列对于当前整个正整数序列如果相邻之间的数字和为偶数则在它们中间插入它们的平均数翻转当前正整数序列指定下标之间的一段数字。这里的翻转指的是对于一段数字序列 Ai,Ai1,…,Aj−1,Aj将其变为 Aj,Aj−1,…,Ai1,Ai。请你输出按输入顺序依次完成若干次操作后的结果。输入格式:输入第一行是两个正整数 N,M (1≤N,M≤103)分别表示正整数个数以及操作次数。接下来的一行有 N 个用一个空格隔开的正整数 Ai (1≤Ai≤26)表示需要进行操作的原始数字序列。紧接着有 M 部分每一部分表示一次操作你需要按照输入顺序依次执行这些操作。记 L 为当前操作序列长度注意原始序列在经过数次操作后其长度可能不再是 N。每部分的格式与约定如下第一行是一个 1 到 3 的正整数表示操作类型对应着题面中描述的操作1 对应查找-替换操作2 对应插入平均数操作3 对应翻转操作对于第 1 种操作第二行首先有一个正整数 L1 (1≤L1≤L)表示需要查找的正整数序列的长度接下来有 L1 个正整数范围与 Ai 一致表示要查找的序列里的数字数字之间用一个空格隔开。查找时序列是连续的不能拆分。第三行跟第二行格式一致给出需要替换的序列长度 L2 和对应的正整数序列。如果原序列中有多个可替换的正整数序列只替换第一个数开始序号最小的一段且一次操作只替换一次。注意 L2 范围可能远超出 L。如果没有符合要求的可替换序列则直接不进行任何操作。对于第 2 种操作没有后续输入直接按照题面要求对整个序列进行操作。对于第 3 种操作第二行是两个正整数 l,r (1≤l≤r≤L)表示需要翻转的连续一段的左端点和右端点下标闭区间。每次操作结束后的序列为下一次操作的起始序列。保证操作过程中所有数字序列长度不超过 100N。题目中的所有下标均从 1 开始。输出格式:输出进行完全部操作后的最终正整数数列数之间用一个空格隔开注意最后不要输出多余空格。输入样例:39 514 9 2 21 8 21 9 10 21 5 4 5 26 8 5 26 8 5 14 4 5 2 21 19 8 9 26 9 6 21 3 8 21 1 14 20 9 2 113 26 8 52 14 1337 38111 26 9 6 21 3 8 21 1 14 20 914 1 2 3 4 5 6 7 8 9 10 11 12 13 14232 40输出样例:14 9 8 7 6 5 4 3 2 1 5 9 8 19 20 21 2 5 4 9 14 5 8 17 26 1 14 5 4 5 13 21 10 9 15 21 8 21 2 9 10 11 12 13 14 1 2#includebits/stdc.h using namespace std; const int N1e310; typedef long long ll; int n,m; //定义一个原数组 vectorintorig; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cinnm; for(int i0;in;i){ int x; cin x; orig.push_back(x); } while(m--){ int t;cint; if(t1){ //定义查找数组 vectorintfind1; //定义替换数组 vectorintreplace1; //定义新的数组 vectorintresult; //输入 int x1;cinx1; for(int i0;ix1;i){ int x; cin x; find1.push_back(x); } int x2;cinx2; for(int i0;ix2;i){ int x; cin x; replace1.push_back(x); } //查找 int index-1;//记录第一个下标 for(int i0;ix1(int)orig.size();i){ //从0开始遍历 bool flag1true;//先假设找到了 for(int j0;jx1;j){ if(orig[ij]!find1[j]){ flag1false; break; } } if(flag1){ indexi; break; } } if(index!-1){ //灵活运用vector可以oush_back也可以通过下标存入 for(int i0;iindex;i)result.push_back(orig[i]); for(int i0;ix2;i)result.push_back(replace1[i]); for(int iindexx1;i(int)orig.size();i)result.push_back(orig[i]); origresult;//更新原序列 } }else if(t2){ //也是巧妙利用新数组进行插入 //定义新的数组 vectorintresult; for(int i0;i(int)orig.size();i){ // 先把当前元素放入结果 result.push_back(orig[i]); //// 如果当前元素不是最后一个且与下一个元素的和为偶数 if(i 1 (int)orig.size()(orig[i]orig[i1])%20){ result.push_back((orig[i]orig[i1])/2); } } origresult;//更新原序列 }else{ int l,r; cinlr; //反转直接使用reverse函数 //reverse 的区间是 [first, last)左闭右开 //而且我使用的vector是从0开始的而题中移动是从1开始的 //所以涉及l-1 reverse(orig.begin() (l - 1), orig.begin() r); } } //输出一定按要求进行输出 for (int i 0; i (int)orig.size(); i) { if (i 0) cout ; cout orig[i]; } cout \n; return 0; }