当前位置: 首页 > news >正文

[iHooya]2023年1月30日作业解析

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

输入
第一行一个整数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 <bits/stdc++.h>
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 <bits/stdc++.h>
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;
		else
			return 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 <bits/stdc++.h>
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 <bits/stdc++.h>
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<bits/stdc++.h>
using namespace std;
int main(){
	string s1,s2;
	bool flag=true;
	cin>>s1>>s2;
	for(int a=0;a<s2.length();a++)
	{
		if(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;a<s1.length();a++)
	{
		if(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<bits/stdc++.h>
using namespace std;
int main()
{
	string s;//用于输入的字符串
	getline(cin,s);
	vector<string> word;//定义字符串类型的动态数组存单词
	s=s+' ';//字符串后连接一个空格用来确保单词全部存入动态数组里
	int x=0;//目标遍历到的字符的位置
	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=word.size()-1;a>=0;a--)
		cout<<word[a]<<" ";
	return 0;
}

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

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

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

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

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

#include <bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	getline(cin, s);
	vector<string> 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 <bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	getline(cin, s);
	vector<string> 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 <bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	vector<string> 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
在这里插入图片描述

相关文章:

  • springBean的作用域
  • 2022年度总结:拒绝无效努力,实现破圈成长。
  • CSS选择器整理学习(下)
  • [Lua实战]整理Lua中忽略的问题
  • Spring事件详解,Spring-Event源码详解,一文搞透Spring事件管理
  • 【C语言进阶】柔性数组
  • 2023​史上最全软件测试工程师常见的面试题总结​ 备战金三银四
  • Day12【元宇宙的实践构想01】—— 元宇宙概念和发展历程
  • 《从0开始学大数据》之如何自己开发一个大数据SQL引擎
  • websoket是干么的如何基于websoket实现一个简单的消息通信。
  • nacos 服务发现获取列表源码分析
  • 【MySQL】过年没有回老家,在出租屋里整理了一些思维导图
  • 《流浪地球 2》 Deepfake 小试牛刀,45+ 吴京「被」年轻,变身 21 岁小鲜肉
  • C++工程实践必备技能
  • GitHub访问问题与FastGithub下载及使用(详细篇)
  • 【Leetcode】101. 对称二叉树
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【React系列】如何构建React应用程序
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • angular组件开发
  • Codepen 每日精选(2018-3-25)
  • Cumulo 的 ClojureScript 模块已经成型
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • java8 Stream Pipelines 浅析
  • js操作时间(持续更新)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • python大佬养成计划----difflib模块
  • socket.io+express实现聊天室的思考(三)
  • Twitter赢在开放,三年创造奇迹
  • Vue 2.3、2.4 知识点小结
  • vue-cli在webpack的配置文件探究
  • Xmanager 远程桌面 CentOS 7
  • 爱情 北京女病人
  • 复杂数据处理
  • 关于for循环的简单归纳
  • 技术胖1-4季视频复习— (看视频笔记)
  • 开源SQL-on-Hadoop系统一览
  • 前言-如何学习区块链
  • 深度解析利用ES6进行Promise封装总结
  • 我这样减少了26.5M Java内存!
  • 小程序开发中的那些坑
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #pragma 指令
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (剑指Offer)面试题34:丑数
  • (十六)Flask之蓝图
  • (转)JAVA中的堆栈
  • *上位机的定义
  • .apk 成为历史!
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net mvc 获取url中controller和action
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使窗口永不获得焦点
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)