[iHooya]2023年1月30日作业解析
创始人
2024-05-21 08:37:04
0

温度统计
现有一段时间的温度数据,请统计指定温度出现的次数。

输入
第一行一个整数n,表示温度数据的个数。(0 < n ≤ 200) 第二行n个整数,以空格分隔,每个整数表示一个温度,温度的范围大于等于0,小于等于40。 第三行一个整数,表示需要查询的温度t。(0 ≤ t ≤ 40)

输出
输出一个整数,表示温度t出现的次数。

样例输入
10
18 19 21 17 20 18 21 21 22 21
21

样例输出
4

考点:对一维数组操作
核心:判断+计数

#include 
using namespace std;int main()
{int n;cin >> n;int arr[n];//存一段时间的温度for (int a = 0; a < n; a++)cin >> arr[a];int t, count = 0; //指定的温度,计数器cin >> t; //指定的温度for (int b = 0; b < n; b++){if (arr[b] == t)count++;}cout << count;return 0;
}

序列排序
对于给定的正整数序列,按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。

输入
第一行1个整数n,表示序列的大小。( 0 < n ≤ 1000) 第二行n个正整数,表示序列的每个数,每个数不大于100000000。

输出
输出按照题目要求排序后的序列

样例输入
6
17 26 9 13 88 10

样例输出
88 9 26 17 13 10

考点:有条件的排序
核心:对数求位数和,判断排序条件

#include 
using namespace std;
//方法1
bool cmp(int a, int b)//改写sort函数排序规则
{int sum1 = 0, sum2 = 0;while (a != 0) //前一个数字位数求和{sum1 += a % 10;a /= 10;}while (b != 0) //后一个数字位数求和{sum2 += b % 10;b /= 10;}if (sum1 > sum2) //按照每个数的各位数和从大到小排序return true;else if (sum1 == sum2) //各位数和相同的按照本身大小排序,大的在前,小的在后。{if (a >= b)return true;elsereturn false;}else if (sum1 < sum2)return false;
}int main()
{int n;cin >> n;int arr[n];for (int a = 0; a < n; a++)cin >> arr[a];sort(arr, arr + n, cmp);for (int b = 0; b < n; b++)cout << arr[b] << " ";return 0;
}

#include 
using namespace std;int  jia(int a)//把位数求和封装成一个函数,方便调用
{int sum = 0;while (a != 0){sum += a % 10;a /= 10;}return sum;
}int main()
{int n;cin >> n;int arr[n], sum[n]; //存原本的数,存位数求和后的数for (int a = 0; a < n; a++){cin >> arr[a];sum[a] = jia(arr[a]); //将原本的数经过求和后赋值给求和的数组}for (int a = 0; a < n; a++){for (int b = 0; b < n - a - 1; b++){//按照每个数的各位数和从大到小排序,各位数和相同的按照本身大小排序,大的在前,小的在后。if (sum[b] < sum[b + 1] || (sum[b] == sum[b + 1] && arr[b] < arr[b + 1])){swap(sum[b], sum[b + 1]);swap(arr[b], arr[b + 1]);}}}for (int b = 0; b < n; b++)cout << arr[b] << " ";return 0;
}

单词的长度
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。

输出
依次输出对应单词的长度,之间以逗号间隔。

样例输入
She was born in 1990-01-02 and from Beijing city.

样例输出
3,3,4,2,10,3,4,7,5

考点:字符串处理
核心:对计数条件判断

#include 
using namespace std;int main()
{string s;getline(cin, s);int count = 0;for (int a = 0; a < s.length(); a++){if (s[a] != ' ') //没有遇到空格count++;else if (s[a] == ' ' && s[a + 1] != ' '){cout << count << ',';count = 0; //重新计数}}cout << count; //补上最后一个计数结果,后面没有逗号return 0;
}

扫雷游戏地雷数计算
扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。
现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。

输入
第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。 接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。

输出
n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。

样例输入
3 3
??
???
?
?

样例输出
10
221
1
1

考点:对二维数组的操作
核心:对周围方向的判断

在这里插入图片描述
方法1
在这里插入图片描述

方法2
在这里插入图片描述

古代密码
古罗马帝国有一个拥有各种部门的强大政府组织。其中一个部门就是保密服务部门。为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的。当时最流行的加密方法是替换和重新排列。
替换方法是将所有出现的字符替换成其它的字符。有些字符会替换成它自己。例如:替换规则可以是将’A’ 到 'Y’替换成它的下一个字符,将’Z’替换成 ‘A’,如果原词是 “VICTORIOUS” 则它变成 “WJDUPSJPVT”。
排列方法改变原来单词中字母的顺序。例如:将顺序例如将顺序 < 2 1 5 4 3 7 6 10 9 8 > 应用到 “VICTORIOUS” 上,则得到"IVOTCIRSUO"。
人们很快意识到单独应用替换方法或排列方法加密,都是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两种方法结合就可以将"VICTORIOUS" 加密成"JWPUDJSTVP"。
考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证,你的任务就是写这个验证程序。

输入
输入有两行。第一行是石台上的文字。文字中没有空格,并且只有大写英文字母。第二行是被解读出来的加密前的文字。第二行也是由大写英文字母构成的。 两行字符数目的长度都不超过100。

输出
如果第二行经过某种加密方法后可以产生第一行的信息,输出 “YES”,否则输出"NO"。

样例输入
JWPUDJSTVP
VICTORIOUS

样例输出
YES

考点:字符串,排序

#include
using namespace std;
int main(){string s1,s2;bool flag=true;cin>>s1>>s2;for(int a=0;aif(s2[a]>='A'&&s1[a]<='Y')s2[a]=s2[a]+1;else if(s2[a]=='Z')s2[a]='A';}sort(s1.begin(),s1.end());//对字符串进行排序(字典序)sort(s2.begin(),s2.end());for(int a=0;aif(s1[a]!=s2[a]){cout<<"NO";flag=false;}}	if(flag==true)cout<<"YES";return 0;
}

单词倒排
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。

输入:输入为一个字符串(字符串长度至多为100)。
输出:输出为按要求排序后的字符串。

样例输入I am a student
样例输出student a am I

#include
using namespace std;
int main()
{string s;//用于输入的字符串getline(cin,s);vector word;//定义字符串类型的动态数组存单词s=s+' ';//字符串后连接一个空格用来确保单词全部存入动态数组里int x=0;//目标遍历到的字符的位置for(int a=0;aif(s[a]==' '){//遇到了空格说明已经遍历完一个单词了word.push_back(s.substr(x,a-x));//提取子串存入动态数组x=a+1;}}for(int a=word.size()-1;a>=0;a--)cout<

单词排序
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)

输入:一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符。

输出:按字典序输出这些单词,重复的单词只输出一次。

样例输入She wants to go to Peking University to study Chinese

样例输出
Chinese
Peking
She
University
go
study
to
wants

#include 
using namespace std;int main()
{string s;getline(cin, s);vector word;//创建string类型动态数组用来存单词int x = 0;s = s + ' '; //字符串后加一个空格用做最后一个单词的判断for (int a = 0; a < s.length(); a++){if (s[a] == ' ') //当遇到空格就说遍历完一个单词了{word.push_back(s.substr(x, a - x)); //提取单词放进动态数组中x = a + 1;}}sort(word.begin(), word.end());for (int a = 0; a < word.size(); a++)if ((word[a] != word[a - 1]) && (word[a].empty() != true))cout << word[a] << endl;return 0;
}

单词的长度
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。

输出
依次输出对应单词的长度,之间以逗号间隔。

样例输入
She was born in 1990-01-02 and from Beijing city.

样例输出
3,3,4,2,10,3,4,7,5

#include 
using namespace std;int main()
{string s;getline(cin, s);vector word;//创建string类型动态数组用来存单词int x = 0;s = s + ' '; //字符串后加一个空格用做最后一个单词的判断for (int a = 0; a < s.length(); a++){if (s[a] == ' ') //当遇到空格就说遍历完一个单词了{word.push_back(s.substr(x, a - x)); //提取单词放进动态数组中x = a + 1;}}for (int a = 0; a < word.size(); a++)if (word[a].length() != 0)cout << word[a].length() << ",";return 0;
}

最长最短单词
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。

输入:一行句子。
输出:两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。

样例输入
I am studying Programming language C in Peking University

样例输出
Programming
I

提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

#include 
using namespace std;int main()
{string s;vector word;//定义动态string类型数组存单词int max = 0, min = 101;getline(cin, s);s = s + ' '; //确保存入到最后一个单词int x = 0, count = 0; //当前单词位置,单词长度for (int a = 0; a < s.length(); a++){if (s[a] == ' '){word.push_back(s.substr(x, a - x));count++;//记录单词长度x = a + 1;}}for (int a = 0; a < word.size(); a++){if (word[a].length() >= max)max = word[a].length();if (word[a].length() <= min)min = word[a].length();}for (int a = 0; a < word.size(); a++)if (word[a].length() == max){cout << word[a];break;}cout << endl;for (int a = 0; a < word.size(); a++)if (word[a].length() == min){cout << word[a];break;}return 0;
}

在这里插入图片描述
方法1:
在这里插入图片描述

方法2
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...