解密QQ号
一、原题
【 题目描述 】
YSM 在年级里人缘特别好,大家都找他要 QQ 号,数学特别好的它有时也小卖弄一下,他把 QQ 号加密后告诉同学们,所以同学们要得到他的 QQ 号还得先解密。解密规则是这样的:首先将第一个数字删除,再将第二个数字放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第5个数删除,…,以此类推,将最后一个数字也删除。按照刚才删除的顺序,把这些删除的数字连在一起,最后的 7 位就是 YSM 的 QQ 号。当然解密后的数字串肯定不止 7 位,不到 100 位。
【 输入 】
一行,包含符合题目描述的一个数字串,表示加密后的 QQ 号码。
【 输出 】
一个七位的数字串,表示 YSM 的 QQ 号。
【 样例输入 】
631758924
【 样例输出 】
5947283
二、分析
这道题一共有两种方法,一个是自定义队列,另外一个是用STL模板中的队列"< queue >"来做。以下是详细解析
方法 (一) : 自定义队列
|| 这道题目就是一道简单的队列问题,我们要先定义两个指针,“front”与“rear”(front前指针,rear后指针,删除第一个就是front++),然后就用while循环一直执行题目中的操作,直到为空,把删除的存在另一个数组里,最后输出数组中的后四个即可。
方法(二):STL模板
|| 这个方法就用到了队列指令了,感兴趣的小伙伴可以去网上自主查询,这是我提供的一个比较好的网站,以及我从网上查到的指令
https://blog.csdn.net/zichen_ziqi/article/details/80819939
queue<int> q; //定义队列,<int>指的是队列类型
q.empty() //如果队列为空返回true,否则返回false
q.size() // 返回队列中元素的个数
q.pop() // 删除队列首元素但不返回其值
q.front() //返回队首元素的值,但不删除该元素
q.push() //在队尾压入新元素
q.back() //返回队列尾元素的值,但不删除该元素//注意,q指的是队列名字
具体方法在f1自定义里队列都提到了,我就不多了,接下来就爆料下我的代码喽!
三、正解
方法(一):
#include <iostream>
#include <cstring>
using namespace std;
char a[202],b[202];
int main()
{int front=0,rear=0;cin>>a;int len=strlen(a);rear=len;int i=0;while(front!=rear){b[i]=a[front++];a[rear++]=a[front++];i++;}int len1=strlen(a);for(i=len-7;i<len;i++){cout<<b[i];}return 0;
}
方法(二):
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int main()
{queue<char> q;int t,t1,i;char a[202];cin>>a;int len=strlen(a);for(i=0;i<len;i++){q.push(a[i]);}i=0;while(!q.empty()){a[i++]=q.front();q.pop();t1=q.front();q.push(t1);q.pop(); }for(i=len-7;i<len;i++){cout<<a[i];}return 0;
}