堆积木
堆积木蒜头君有 n 块积木,编号分别为 1 到 n。一开始,蒜头把第 i 块积木放在位置 i。蒜头君进行 m 次操作,每次操作,蒜头把位置 b 上的积木整体移动到位置 a 上面。比如 1 位置的积木是 1,2 位置的积木是 2,那么把位置 2 的积木移动到位置 1 后,位置 1 上的积木从下到上依次为 1,2。
输入格式第一行输入 2 个整数 n,m (1≤n≤10000,0≤m≤10000)。
接下来 m 行,每行输入 2 个整数 a,b (1≤a,b≤n),如果a,b 相等则本次不需要移动。
输出格式输出 n 行,第 i 行输出位置 i 从下到上的积木编号,如果该行没有积木输出一行空行。
实现代码这道题是我第一次用广义表,应该还是能优化不少的,bug改着改着就解决了,没什么实感(?)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879#i ...
幻方矩阵&话题焦点人物
幻方矩阵一天蒜头君买了一个幻方矩阵,这个矩阵每次可以交换任意两行或者任意两列。花椰妹看到说这么简单的东西,我自己就可以编程实现了。蒜头君要强地说这么简单我肯定也会,但是蒜头君并不会,只好求助你来编程实现。
输入格式第一行输入两个整数 n,m,表示这个幻方矩阵大小为 n×m。
接下来是一个 n×m 的矩阵。
接下来一行有一个整数 op,表示有 op 次操作。
接下来 op 行,每行有三个整数 x,y,z。
当 x=0 的时候表示交换第 y 行和第 z 行。
当 x=1 的时候表示交换第 y 列和第 z 列。
输出格式输出交换后的矩阵。
数据范围对于 30% 的数据,1≤n,m,op≤100。
对于 60% 的数据,1≤n,m,n×m≤10的5次方,1≤op≤100。
对于 100% 的数据,1≤n,m,n×m,op≤10的5次方,1≤ 矩阵中每个数字的大小 ≤10的6次方。
实现代码比较简单的一道题,在使用动态数组之前是过不了测试点的。
123456789101112131415161718192021222324252627282930313233343536373 ...
回文判断&逆波兰式
回文判断我们把正读和反读都相同的字符序列称为“回文”,例如abba和abcba是回文,abcde不是回文。尝试写一个算法判别读入的一个以@为结束符的字符是否是回文。
输入格式输入为一行,为待判断的字符串,以@结尾。字符串长度不超过 30,除最后一个字符外,其余字符均由小写字母组成。
输出格式输出一行,如果输入的字符串是回文,则输出true;如果输入的字符串不是回文,则输出false。
实现代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#include<iostream>#include<stdlib.h>#include<string>using namespace std;typedef struct{ char data[31]; int top;}sqstack,*sqslink;bool push ...
蒜头君的魔法机
蒜头君的魔法机蒜头君有一台神奇的魔法机,它能将输入的序列进行一系列复杂的变换,输出原序列的另一种排列方式。蒜头君十分好奇魔法机的工作原理,终于有一天他尝试着把魔法机拆开研究了。
通过一系列复杂的演算,蒜头君终于发现了魔法机的工作原理:其实魔法机就是一个栈,根据栈先进后出的性质,每次一个数字进栈或将栈顶元素弹出,由此可以产生不同的出栈序列,出栈序列就是原序列的另一种排列了。
在研究完原理后,蒜头君凭借记忆很快就把魔法机组装好了。现在蒜头君想测试下魔法机在组装完成后是否出现问题。
首先他将 1 到 N 这 N 个数字依次输入魔法机里,然后随机写下一组序列a,现在他想知道能否通过魔法机得到序列a,聪明的你能帮蒜头君算一算吗?
输入格式输入有两行,第一行是一个正整数 N(1≤N≤100),表示输入魔法机序列的长度,第二行是序列a,共有 N 个整数,表示要得到的目标序列。
序列为 1 到 N 的排列,即序列a长度为 N,保证序列中的整数都不相同,且整数在区间 [1, N] 内。
输出格式输出一行,如果能通过魔法机得到序列a,则输出YES,否则输出NO。
实现代码思路:模拟魔法机的实现,其中a数 ...
队列:通话记录
通话记录(队列)已知不超过 50条通话记录,通话记录有三种类型:0代表未接来电,1 代表已接来电,2 代表已拨电话。要求分别将三种类型前 10 条通话记录以三列的形式输出。
输入格式输入不超过 50条通话记录,每条通话记录都占一行。每一行的第一个数字代表通话记录的类型,第二个数字代表电话号码,电话号码均由 11个数字组成。他们之间用一个空格隔开。
输出格式分三列输出未接来电、已接电话和已拨电话。
每列之间用一个空格分割,最后一列后没有空格。每种类型输出前十个电话,先出现的通话记录先输出,不足十个的用 0 占位。
实现代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include<iostream>#include<string>#include<stdlib.h>using namespace std;typedef struct//队列{ string dat ...
链表初学整理
链表首先是对链表的介绍(由chatgpt3.5生成)
链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表中的节点可以在内存中的任何位置,它们通过指针连接在一起,形成一个链式结构。
链表可以分为单向链表和双向链表两种类型。在单向链表中,每个节点只有一个指针,指向下一个节点;而在双向链表中,每个节点有两个指针,分别指向前一个节点和后一个节点。
链表相对于数组的优势在于插入和删除操作的效率较高。由于链表中的节点可以在内存中的任何位置,因此在插入和删除节点时,只需要修改相邻节点的指针,而不需要移动其他节点。这使得链表在需要频繁插入和删除操作的场景中更加高效。
然而,链表的缺点是访问节点的效率较低。由于链表中的节点不是连续存储的,因此无法通过下标直接访问节点,而是需要从头节点开始遍历链表,直到找到目标节点。这使得链表在需要频繁访问节点的场景中效率较低。
总结起来,链表是一种常见的数据结构,适用于需要频繁插入和删除操作的场景。它的优势在于插入和删除操作的效率较高,但访问节点的效率较低。
啊,gpt老师说得好(鼓掌)
那么就从实际体验中来体会链 ...
Markdown语法总览
其实本来就有语法总览的网站:Markdown语法总览
虽然已经有官网了,但我想着反正自己要试用,干脆写成一个博客罢(
基本语法
标题(Heading):在标题之前加“#”,#越多标题越小。(一共六级)
粗体(Bold):在要加粗的字两边分别加两个星号,比如这个,两个星号–>**。
斜体(Italic):在斜体的字两边分别加一个星号,比如这个。
引用块(Blockquote):在要引用的部分之前加“>”,如下:
明日的夜空哨戒班
有序列表(Ordered List):阿拉伯数字+小数点就行了,如下:
塞尔达传说:时之笛
塞尔达传说:王国之泪
塞尔达传说:旷野之息
无序列表(Unordered List):前面每一个语法前的点其实是“-”,用的就是无序列表
代码(Code):用键盘左上角的反引号括起来``,比如cout<<"一键三连"<<endl;
分隔线(Horizontal Rule):在单独一行使用“—”、“***”、“___”,如下
链接(Link):[title],在这之后加 ...
我的第一个博客
早中晚上好Hello(?)我的博客网站正式开通啦!(好像暂时算是搞定了)
网站用途大概用来写一些自己的学习心得、笔记之类的地方吧。