【天梯赛集训】7.17习题集

 AC: 12 / 12

用时:2 h 21 min

没卡思路,卡了几个测试点。

7-1 输入输出整数

 

#include <iostream>using namespace std;int main()
{int a;cin >> a;cout << a;return 0;
}

7-2 调整数组使奇数全部都位于偶数前面其他数字顺序不变

 

#include <iostream>
#include <string>using namespace std;int main()
{string s, a;cin >> s;int len = s.size();for(int i = 0; i < len; i++){if(s[i] % 2 == 0) a += s[i];else cout << s[i];}cout << a << endl;return 0;
}

逐一读取字符,奇数直接输出,偶数存入字符串a中,最后输出字符串a即可。

7-3 判断回文字符串

 

#include <iostream>
#include <string>using namespace std;int main()
{string s;cin >> s;int l = 0, r = s.size() - 1;bool flag = true;while(l < r){if(s[l] != s[r]){flag = false;break;}l++, r--;}cout << (flag ? "YES, " : "NO, ") << (int)s.size() << endl;return 0;
}

头尾指针l和r,向中间逐个字符读取,一旦判假则退出循环,循环结束。

注意while循环条件为l <= r即可。

7-4 神密的数列

 

#include <iostream>
#include <string>
#include <cstring>using namespace std;const int N = 110;
int a[N];int dfs(int x)
{if(a[x]) return a[x]; //a[x] != 0说明此项已求出return a[x] = 2 * dfs(x - 1) - dfs(x - 2) + 1;
}int main()
{int t;cin >> t;a[1] = 1;a[2] = 2;while(t--){int n;cin >> n;cout << dfs(n) << endl;}return 0;
}

两个等差数列式子得出二阶等差数列通项,初始化前两项,递归即可。

 7-5 杨辉三角

 

#include <iostream>
#include <string>using namespace std;int g[20][20];int main()
{int n;cin >> n;if(n == 1) printf("   1");else{printf("   1\n   1   1\n");if(n > 2){g[2][1] = g[2][2] = 1;for(int i = 3; i <= n; i++){g[i][1] = g[i][i] = 1;for(int j = 1; j <= i; j++){if(j == 1 || j == i) printf("   1");else{g[i][j] = g[i - 1][j - 1] + g[i - 1][j];printf("%4d", g[i][j]);}}puts("");}}}return 0;
}

初始化前两行,从第三行开始,每行首尾均为1,中间每个数字由上一行两个数字相加得到。

7-6 九连环问题

 

#include <iostream>
#include <string>
#include <cstring>using namespace std;const int N = 20;
bool st[N]; //false表示处于装上的状态,true表示处于卸下的状态void dfs(int x, char op) //给x号环进行op操作
{if(x == 1) //1号环任意装卸{printf("%d: %c\n", x, op);if(op == 'U') st[x] = false;else st[x] = true;return;}//非1号环,检查是否能直接装卸bool flag = true;if(st[x - 1] == true) flag = false;else{for(int i = x - 2; i >= 1; i--){if(st[i] == false){flag = false;break;}}}if(flag){printf("%d: %c\n", x, op);if(op == 'U') st[x] = false;else st[x] = true;}else //如果不能,则从后往前依次处理,直到x号环可以装卸{if(st[x - 1] == true) dfs(x - 1, 'U');for(int i = x - 2; i >= 1; i--){if(st[i] == false){dfs(i, 'D');}}printf("%d: %c\n", x, op);if(op == 'U') st[x] = false;else st[x] = true;}
}int main()
{int n;char ch;cin >> n >> ch;if(ch == 'U'){memset(st, true, sizeof st);for(int i = n; i >= 1; i--){if(st[i] == true) dfs(i, 'U');}}else{for(int i = n; i >= 1; i--){if(st[i] == false) dfs(i, 'D');}}return 0;
}

参考汉诺塔问题,递归。

7-7 判断上三角矩阵

 

#include <iostream>
#include <string>using namespace std;int g[20][20];int main()
{int n;cin >> n;while(n--){int t;cin >> t;for(int i = 1; i <= t; i++)for(int j = 1; j <= t; j++)cin >> g[i][j];bool flag = true;for(int i = 2; i <= t && flag; i++)for(int j = 1; j <= i - 1; j++){if(g[i][j] != 0){flag = false;break;}}cout << (flag ? "YES" : "NO") << endl;}return 0;
}

 从第二行(如果有)开始判断即可。

7-8 考试座位号

 

#include <iostream>
#include <string>
#include <cstring>
#include <map>using namespace std;const int N = 110;int n, m;
map<int, string> shiji;
map<string, int> kaoshi;int main()
{scanf("%d", &n);while(n--){string a;int b, c;cin >> a >> b >> c;shiji[b] = a;kaoshi[a] = c;}scanf("%d", &m);while(m--){string a;int b, c;cin >> b;a = shiji[b];c = kaoshi[a];cout << a << ' ' << c << endl;}return 0;
}

 两个map容器即可。

7-9 吉老师的回归 

 

#include <iostream>
#include <algorithm>
#include <string>using namespace std;const int N = 110;int n, m;int main()
{scanf("%d%d", &n, &m);getchar();string s;while(n--){getline(cin, s);if(s.find("easy") != s.npos || s.find("qiandao") != s.npos){continue;}if(m == 0){cout << s << endl;break;}m--;}if(n == -1) puts("Wo AK le");return 0;
}

注意判断当前已做题目数量和m关系的代码位置,测试点2答案错误的代码如下:

#include <iostream>
#include <algorithm>
#include <string>using namespace std;const int N = 110;int n, m;int main()
{scanf("%d%d", &n, &m);getchar();string s;while(n--){getline(cin, s);if(m == 0){cout << s << endl;break;}if(s.find("easy") != s.npos || s.find("qiandao") != s.npos){continue;}else m--;}if(n == -1) puts("Wo AK le");return 0;
}

7-10 病人排队

 

#include <iostream>
#include <algorithm>
#include <string>using namespace std;const int N = 110;struct Node
{string id;int year;int order;bool isOld;
}node[N];int n;bool cmp(Node a, Node b)
{if(a.isOld == b.isOld){if(a.isOld == true){if(a.year != b.year) return a.year > b.year;else return a.order < b.order;}else return a.order < b.order;}else return a.isOld > b.isOld;
}int main()
{scanf("%d", &n);for(int i = 0; i < n; i++){string a;int b;bool c = false;cin >> a >> b;if(b >= 60) c = true;node[i] = {a, b, i, c};}sort(node, node + n, cmp);for(int i = 0; i < n; i++) cout << node[i].id << endl;return 0;
}

 根据题目要求写好cmp比较函数然后sort,依次打印id即可。

7-11 黑洞数

 

#include <iostream>
#include <algorithm>
#include <string>using namespace std;int main()
{string s;cin >> s;int a, b, c;for(int i = 1; ; i++){sort(s.begin(), s.end());b = stoi(s);reverse(s.begin(), s.end());a = stoi(s);c = a - b;printf("%d: %d - %d = %d\n", i, a, b, c);if(c == 495) break;else s = to_string(c);}return 0;
}

 善用字符串和整型互相转换的函数即可。

7-12 h0034. 平方矩阵 II

 

 

#include <iostream>
#include <algorithm>
#include <string>using namespace std;const int N = 110;int g[N][N];int main()
{int n;for(int i = 1; i <= 100; i++){for(int j = i; j >= 1; j--)g[i + 1 - j][i] = g[i][i + 1 - j] = j;}while(scanf("%d", &n), n){for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){printf("%d ", g[i][j]);}puts("");}puts("");}return 0;
}

先预处理好100阶的矩阵,然后根据要求打印即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode LSP 语言服务器协议总结

为什么使用语言服务器协议&#xff1f; LSP(Language Server Protocol)语言服务器是一种特殊的 Visual Studio Code 扩展&#xff0c;可为许多编程语言提供编辑体验。使用语言服务器&#xff0c;您可以实现自动完成、错误检查&#xff08;诊断&#xff09;、跳转到定义以及VS …

二叉树(下)+Leetcode每日一题——“数据结构与算法”“对称二叉树”“另一棵树的子树”“二叉树的前中后序遍历”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容仍然是二叉树和Leetcode每日一题&#xff0c;下面&#xff0c;就让我们进入二叉树的世界吧&#xff01;&#xff01;&#xff01; 这个题目需要重新定义一个函数&#xff0c;函数参数需要有左子树和右子树&#xff0c;题目所…

cesium的使用

cesium的使用 cesium的使用创建一个vue项目 vuevitecesium参数的使用常用点位标记删除动态渲染路线借助truf.js的算法进行渲染地块的实现topojson cesium的使用 1.下载或者安装cesium的插件 官方文档 下载下来后创建文件夹整个包引入 2.生成token 新的包应该有默认token如果没…

【idea】的一些使用指南

一、serializable自动生成id 1.打开File菜单&#xff0c;选择Settings选项 2.打开Editor->Inspections 3.在右边的搜索框中输入serialVersionUID关键字&#xff0c;出现以下选项&#xff0c;勾选"Serializable class without serialVersionUID"&#xff0c;然后别…

MySQL-概述-数据模型SQL简介

数据库&#xff1a;DataBase&#xff08;DB&#xff09;&#xff0c;是存储和管理数据的仓库数据库管理系统&#xff1a;DataBase Management System&#xff08;DBMS&#xff09;&#xff0c;操作和管理数据库的大型软件。SQL&#xff1a;Structured Query Language&#xff0…

12.matlab数据分析——多项式的建立 (matlab程序)

1.简述 多项式及其建立 在运算中我们经常接触到的就是所谓的多项式&#xff0c;比如很常见的一个多项式&#xff1a; 这里我们就说这是一个x的多项式&#xff0c;最高次是2次&#xff0c;常数项是3&#xff0c;二次项的系数是1&#xff0c;一次项的系数是2&#xff0c;相信这些…

十八、网页端在移动端的像素

一、简介 -1. 在不同的屏幕&#xff0c;单位像素的大小是不同的&#xff0c;像素越小&#xff0c;屏幕越清晰。 手机端的像素就是宽度和高度&#xff0c;如iphone6 4.7寸 750 x 1334。 -2. 手机的像素点 远远小于 计算机的像素点。 问题&#xff1a;一个宽度为900px的网页在i…

【原创】实现ChatGPT中Transformer模型之Encoder-Decoder

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 Transformer Block &#xff08;通用块&#xff09;实现 看以上整个链路图&#xff0c;其实我们可以很清晰看到这心其实在Encoder环节里面主要是有几个大环节&#xff0c;每一层主要的核心作用如下&#xff1a; Multi-he…

Android Glide onlyRetrieveFromCache downloadOnly submit ,kotlin

Android Glide onlyRetrieveFromCache downloadOnly submit ,kotlin Glide预加载&#xff0c;加载到磁盘或者内存缓存&#xff0c;然后加载的图片只从缓存&#xff08;磁盘缓存或者内存缓存&#xff09;中取。 private val imageFile File("/storage/emulated/0/DCIM/Ca…

【无标题】使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样

问题&#xff1a;使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样&#xff0c;在mac下&#xff0c;一切正常&#xff0c;看起来很舒服&#xff0c;但是当我把页面放在扩展屏幕下&#xff08;27寸&#xff09;&#xff0c;再生成一个pdf&#xff0c;虽然排版一…

.nvmrc无效

背景 既然你已经使用了nvm那么他的功能我就不介绍了。但是使用场景我与开发小伙伴探讨了一下发现很多问题。你的nvm使用方法真的正确吗&#xff1f; 问题&#xff1a;假设现在有10个项目对应10个不同的node版本&#xff0c;你应该怎么来管理呢&#xff1f; 同学1&#xff1a; …

02 |「新建项目」

前言 新建项目 文章目录 前言一、步骤二、结构3. Java 文件夹4. res 文件夹5. Gradle Scripts文件 三、运行流程四、Gradle 构建项目1. 是什么2. 作用 一、步骤 1&#xff09;New Project 2&#xff09;Empty Activity 3&#xff09;Finsh 选项&#xff1a; Name&#xff1a…