Description
你们都玩过微信跳一跳吧~ 要知道苗苗和童童可是跳一跳大神呢。可是她们今天被一个新的跳一跳难倒了,你能帮帮她们吗?
游戏规则:
现在有n 个连续且长为 1 的格子,上面标有一些数字,苗苗和童童站在两端。游戏开始,先将两人中间夹着的(包括所站的地方)所有格子都进行翻转(例如中间夹着的格子如果为1 2 3,则变为3 2 1),然后两个人同时往中间跳一步,直到两人面对面或者站在同一格子上为止。 现在她们想知道走到最后这 n 个格子的数字顺序是什么,你能帮帮她们吗?
Input
第一行包含一个整数 n (0 < n < 1000000)
第二行包含 n 个整数,第 i (1 <= i <= n) 个整数代表第 i 个格子上所标的数字。
Output
按照从左到右的顺序输出这n个数,代表翻转之后每个格子上的数字。
Sample Input
2 10 13
Sample Output
13 10
这个题意:两个人跳,每跳一次,两人中间的格子对称换一下位置.首先想到的思路就是数组循环,数据范围看似不大 1e6,但是趣味编程嘛,哪有这么容易.一定会卡你的.所以,得找规律.经过一番探索,终于让我找到了.分奇偶两种情况讨论.只需要循环数据的1/2就可以.
咳咳....emmm刚才突然发现...其实为什么规律,就是直接循环...嘿嘿.凑个字数吧,上边的就不删了.
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
int a[1000007];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
if(n%2==0)
{
int t=0,b;
b=n/2;
for(int i=1; i<=b; i++)
{
if(i%2!=0)
{
t=a[i];
a[i]=a[n+1-i];
a[n+1-i]=t;
}
}
}
else
{
int t=0,b;
b=(n+1)/2;
for(int i=1; i<=b; i++)
{
if(i%2!=0)
{
t=a[i];
a[i]=a[n+1-i];
a[n+1-i]=t;
}
}
}
for(int i=1; i<=n; i++)
if(i==n)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
return 0;
}