标题: | 解密QQ号 |
||
标签: | 数据结构 队列 | ||
详情: | 新学期开始了,小哈是小哼的新同,小哼向小哈询问QQ号,小哈当然不会直接告诉小哼。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的QQ啦。现在你来帮帮小哼吧。小哈给小哼加密过的一串数是“6 3 1 7 5 8 9 2 4”。解密后小哈的QQ号应该是“6 1 5 9 4 7 2 8 3”。 | ||
输入格式: | |
||
输出格式: | |
||
限制: | 每个测试点1秒 50%的数据1<=n<=10000 100%的数据1<=n<=100000 |
||
样例: |
|
这一题刚开始按照书上两种方法模拟个一遍队列,但是都有一组数据是过不去的,我也没找到是什么原因。
贴出来大家可以找一下原因。本题实现过程过于简单,就不用写题解了。
代码1:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
struct que
{
int date[100000];
int head;
int tail;
};
int main()
{
int n;
scanf("%d",&n);
struct que q;
q.head=1;
q.tail=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&q.date[q.tail]);
q.tail++;
}
while(q.head<q.tail)
{
printf("%d ",q.date[q.head]);
q.head++;
q.date[q.tail]=q.date[q.head];
q.head++;
q.tail++;
}
return 0;
}
代码2:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100001];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int head=1,tail=n+1;
while(head<tail)
{
printf("%d ",a[head]);
head++;
a[tail]=a[head];
head++;
tail++;
}
return 0;
}
这个题最后我用STL里面的队列实现的,一次就A了。
AC代码:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100000];
int main()
{
queue<int>q;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
q.push(a[i]);
}
while(q.size())
{
printf("%d ",q.front());//获取队首元素,q.back()获取队尾元素
q.pop();
q.push(q.front());
q.pop();
}
return 0;
}