2018ACM新生赛(热身赛)

博博的电脑出现了问题,屏幕的某个部分会倒置。博博现在很好奇,如果有 n 个数组成的数列,在博博的电脑看起来是什么样子的呢?
比如说有 n 个数字如1、2、3、4、5,博博的电脑会自动把区间[l ~ r]里面的序列倒置。如果 l 和 r是 2 和 3,那么博博的电脑就会显示1、3、2、4、5。
博博懒得看电脑会把数组变成奇怪的样子,你能直接告诉他大概是什么样子吗?

输入要求
第一行输入一个T(1<=T<=10,000)表示接下来有T组数据
输入的第一行包含三个整数n、 l 和 r (1 ≤ l ≤ r ≤ 1,000, 1 ≤ n ≤ 1,000)
第二行有 n 个数字分别是 a1,a2......an。

输出要求
每次输出占一行,样式为Case #i:+\n+ans+\n(没有加号),ans 为变化后的数组。

测试数据
输入示例
1
5 2 3
1 2 3 4 5
输出示例
Case #1:
1 3 2 4 5

小贴士
博博是嘤嘤怪,数组最后没有空格哦~~~~~~~~~(´。• ᵕ •。`) ♡

1个回答

代码写的不行,凑合试试吧

#include <stdio.h>

int num[1000];
int buf[1000];
int buf_num;
int T,t=0;
int n,l,r;

void func()
{
    int i,ok=0;
    for(i=0;i<n;i++)
    {
        if(ok==0)//普通模式-正序 
        {
            if(num[i]!=l)
            {
                printf("%d",num[i]);
                if(i!=n-1)
                printf(" ");
            }
            else
            {
                ok=1;
                buf[buf_num]=num[i];
                buf_num++;
            }
        }
        else//特殊模式-倒序 
        {
            if(num[i]!=r)
            {
                buf[buf_num]=num[i];
                buf_num++;
            }
            else
            {
                ok=0;
                buf[buf_num]=num[i];
                buf_num++;
                int j;
                for(j=buf_num-1;j>=0;j--)
                {
                    printf("%d",buf[j]);
                    if(i!=n-1 || j!=0)
                    printf(" ");
                }
            }
        }
    }
    return;
}

int main()
{   
    scanf("%d",&T);
    while(t<T)
    {
        buf_num=0;
        scanf("%d %d %d",&n,&l,&r);
        int i;
        for(i=0;i<n;i++)
        {
            scanf("%d",&num[i]);
        }
        t++;
        printf("Case #%d:\n",t);
        func();
        printf("\n");
    }
    return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!