第五届趣味编程大赛——G苗童大作战之跳一跳

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值