【23级红细胞招新模拟训练(部分题解 不包含最后三题】

2023-10-23 22:21

本文主要是介绍【23级红细胞招新模拟训练(部分题解 不包含最后三题】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

提前说明 : 本人是蒟蒻 题解基本没考虑过优化 只求通过
写这篇题解仅仅是分享一下我的做法
使用的语言:cpp

6-1

题目

请编写函数,对三个整数按升序排序。

函数原型 void IntSortAsc3(int *x, int *y, int *z); 

说明:参数 x、y 和 z
为指示三个整型变量的指针,函数值对这三个整型变量进行排序,使 x、y 和 z 所指变量的值按由小到大的顺序排列。

裁判程序
#include <stdio.h>void IntSwap(int *x, int *y); void IntSortAsc3(int *x, int *y, int
*z);int main() {int a, b, c;scanf("%d%d%d", &a, &b, &c);IntSortAsc3(&a, &b, &c);printf("%d %d %d\n", a, b, c);return 0; }void IntSwap(int *x, int *y) {...()... }/* 你提交的代码将被嵌在这里 */

输入样例
15 -27 36

输出样例
-27 15 36

要求:调用前面作业中的 IntSwap 函数交换两个整数的值。

知识点

基础语法:指针的使用
使用语言:C语言

参考代码

void IntSortAsc3(int* x, int* y, int* z) 
{if (*x > *y){IntSwap(x, y);}if (*y > *z){IntSwap(y, z);}if (*x > *y){IntSwap(x, y);}
}

代码解析

通过三个if语句判断一下大小关系

通过画图我们可以理解
前两个if语句已经比较了(x, y)(y, z)这两组
最后直接比较x和y即可

下面给出一个例子
在这里插入图片描述

个人做题过程

一开始第三个if语句我写的是

if (*x > *z)

发现不对 画个图就理解了

以及 完全没看到题目中的要求 写半天发现没分

7-1在这里插入图片描述

不想写了 直接上代码

#include<iostream>using namespace std;int main()
{cout << "                ********" << endl;cout << "               ************" << endl;cout << "               ####....#." << endl;cout << "             #..###.....##...." << endl;cout << "             ###.......######              ###            ###" << endl;cout << "                ...........               #...#          #...#" << endl;cout << "               ##*#######                 #.#.#          #.#.#" << endl;cout << "            ####*******######             #.#.#          #.#.#" << endl;cout << "           ...#***.****.*###....          #...#          #...#" << endl;cout << "           ....**********##.....           ###            ###" << endl;cout << "           ....****    *****...." << endl;cout << "             ####        ####" << endl;cout << "           ######        ######";return 0;
}

7-2

题目

请输出一个三角形,每行由字符串“tnzenb”循环组成

输入格式:
一个整数N

输出格式:
N行字符,即一个三角形,注意不要输出多余的空格和换行。

输入样例:
在这里给出一组输入。 例如:

3
输出样例:
在这里给出相应的输出。例如:

t tnz tnzen

知识点

字符串 + 循环

参考代码


#include<iostream>using namespace std;int main()
{int n;cin >> n;string arr = "tnzenb";for (int i = 1; i <= n; i++)//行数{for (int j = 1; j <= n - i; j++)//打印空格{cout << " ";}for (int k = 0; k < 2 * i - 1; k++){cout << arr[k % 6];}cout << endl;}return 0;
}

代码解析

这题打印出金字塔型很容易也就是打印出字母前面的空格 通过i和j之间的关系就可以做到

每行字母的个数是等差数列

需要注意的是字母的循环打印
我们注意到:字符串的内容是固定的 且每行都是从t(即第一个字符)开始打印
那么, 我们就可以通过对k的判断 直接输出字母

个人做题过程

复盘的时候 我看自己的代码怎么看怎么觉得不对劲

下面也让大家难受一下

			if (k % 6 != 0){cout << arr[k % 6];}else{cout << "t";}

7-3

知识点

循环 + 判断语句

参考代码

 #include<iostream>using namespace std;int main()
{int t, num = 0;cin >> t;for (int i = 0; i < t; i++){int m;cin >> m;num = 0;for (int x = 0; x < m; x++){int a, b;cin >> a >> b;if (a > b){num += 3;}else{num += 1;}}cout << num << endl;}return 0;
}

代码解析

因为两人的成绩作比较只可能有两种情况
所以 通过if else语句可做出这道题

个人做题过程

没卡 所以没得写

7-4

题目

知识点

循环 + 判断语句 + 控制输出

setw fixed 和setprecision语句

同学们或多或少的接触过fixed和setprecision语句
fixed语句是按照小数的形式输出变量
setprecision语句是用于控制输出的位数(精度)
setw语句用于控制输出的长度(宽度)

下面给出两个例子

#include <iostream>  
#include <iomanip>  int main() {  double pi = 3.141592653589793;  std::cout << std::setprecision(3) << pi << std::endl;  // 输出 3.142  return 0;  
}
#include <iostream>  
#include <iomanip>  int main() {  int x = 123;  std::cout << std::setw(10) << x << std::endl;  return 0;  
}

//使用setw语句 也就是我们常说的右对齐

参考代码

#include <iostream>
#include <iomanip> using namespace std;int main() {int a, b;cin >> a >> b;int sum = 0;int cnt = 0;for (int num = a; num <= b; num++) {cout << setw(5) << num; sum += num;cnt++;if (cnt % 5 == 0) {cout << endl;}}if (cnt % 5 != 0) {cout << endl;}cout << "Sum = " << sum << endl;return 0;
}

代码解析

个人做题过程

我一开始用空格做题 发现判断起来比较麻烦
就用了setw语句
(还挺好用的

7-5

知识点

循环语句

参考代码

 #include<iostream>using namespace std;int main()
{int n;cin >> n;for (int i = 1; i < n; i++){for (int j = 1; j < n; j++){for (int k = 1; k <= n; k++){if (i * i + j * j == k * k){cout << "(" << i << ", " << j << ", " << k << ")" << endl;}}}}return 0;
}

代码解析

这道题根据题目提示 并且通过测试用例可以看出是升序输出
所以 直接用三个for循环遍历一下就行了

个人做题过程

我一开始比较叛逆 不想按照题目提示来做 然后没想出来其他的方法
就莽了一下

7-6

知识点

结构体 + 循环语句 + 输出语句 + 判断语句

参考代码

#include <iostream>
#include <iomanip>using namespace std;struct CAT 
{string name;double lw, hw, cw, ck;//分别对应着 最低体重 最高体重 //         推荐体重 推荐摄入的卡路里
} cat[9010];int main() 
{int n, k;cin >> n >> k;string nname;double w;for (int i = 0; i < k; i++){cin >> cat[i].name >> cat[i].lw >> cat[i].hw >> cat[i].cw;cat[i].ck = cat[i].cw * 13.6 + 70;}cout << fixed << setprecision(1);for (int i = 0; i < n; i++) {cin >> nname >> w;for (int j = 0; j < k; j++) {if (cat[j].name == nname) {if (w > cat[j].hw) {cout << "overweight " << cat[j].ck << endl;} else if (w < cat[j].lw) {cout << "underweight " << cat[j].ck << endl;} else {cout << "OK " << cat[j].ck << endl;}break;}}}return 0;
}

代码解析

创建结构体数组存储每种类型的猫

一只一只的输入 边输入边判断 然后遍历结构体数组 找到对应的品种

然后用if else语句判断一下就行了 判断完跳出循环

个人做题过程

这题 也还好吧 没啥卡人的地方 一步一步做就行了

7-7

知识点

数组 + 数学 + 循环

参考代码

#include <iostream>
#include <iomanip> using namespace std;int main() {int n;cin >> n;int arr[100][100]; // 定义一个二维数组用于存储结果int num = 1; // 初始化数字int a = 0; // 行的起始位置int b = 0; // 列的起始位置int a1 = n - 1; // 行的结束位置int b1 = n - 1; // 列的结束位置while (num <= n * n) {// 从左到右填充数字for (int i = b; i <= b1; i++) {arr[a][i] = num++;}a++;// 从上到下填充数字for (int i = a; i <= a1; i++) {arr[i][b1] = num++;}b1--;// 从右到左填充数字for (int i = b1; i >= b; i--) {arr[a1][i] = num++;}a1--;// 从下到上填充数字for (int i = a1; i >= a; i--) {arr[i][b] = num++;}b++;}// 输出结果for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << setw(3) << arr[i][j]; // 使用 setw() 函数设置输出宽度为 3}cout << endl;}return 0;
}

代码解析

我们通过分析测试用例很容易发现这道题的数字排列方式类似一个回型
就可以通过四个边界值 (a 、 b 、a1、 b1)来分别控制每行和每列的输入
这样就不用考虑数字(即num)之间的关系 直接让他一直自增即可

可以看给出的注释
打印完第一行 打印最后一列
打印最后一行 打印第一列
然后这个范围逐渐缩小 直到num达到n * n
赋值完成

个人做题过程

这题很有意思啊 又是我最喜欢(头痛)的数学问题
刚开始看到的时候 我想找一下数学规律 想了几分钟 找不出来 就摁做 一圈一圈的赋值 最后再一行一行的输出
(不喜欢找规律的题

个人感想(前八道题)

不难啊 我只能说 前八道都是通过莽(跟着题目一步一步走)就能做出来的 并且花费的时间也不会很长

至于最后三道题 没做 不做评价(呜呜呜呜呜呜 我是蒟蒻

当然 有其他的思路或者做法大家可以发在评论区或者写一篇博客 多多交流 一起进步

这篇关于【23级红细胞招新模拟训练(部分题解 不包含最后三题】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270821

相关文章

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析