ZCMU 1048: 子串

本文探讨了一个关于字符串A在特定条件下的无限循环拼接问题,通过两种不同的编程方法解决了如何在给定区间内获取拼接后的字符串。该问题源自ACM集训队的一次比赛,涉及到字符串操作和循环结构的巧妙运用。

Description
有一个字符串A,然后执行下面程序
If(A==”X”)
A=”XZCMUACMX”;
While(true)
{
A=A+”ZCMUACM”+A;
}
现在让A=”X”,然后While循环无数次后,求出A在L到R这段区间内的字符串?
Input
多组测试数据,对于每组测试数据都只有一行包含两个整数l,r(1<=l<=r<=10^6,r-l<=100)
Output
对于每组测试数据,输出A的子串。
Sample Input
5 10
Sample Output
UACMXZ
HINT
Source
ACM集训队第三小组第一次组内赛
解题代码:
way1:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[300];
    memset(a,'\0',sizeof(a));//一定要初始化,否则会出现乱码。
    int t = 15;
    const char *p = "XZCMUACM";//多写几个就发现这个在循环。
    while(t--)
    {
        strcat(a,p);
    }
    int L,R,start_a;
    while(~scanf("%d%d",&L,&R))
    {
        if(L % 8 == 0) start_a = 7;
        else start_a = L % 8 - 1;
        for(int i = start_a; i <=(start_a + R-L); i++)
        {
            printf("%c",a[i]);
        }
        printf("\n");
    }
    return 0;
}

way2:

   #include <stdio.h>
    int main()
    {
        char a[10] = "0XZCMUACM";
        int L,R;
        while(scanf("%d%d",&L,&R)!=EOF)
        {
            while(L <= R)
            {
                if(L % 8 == 0)
                    printf("%c",a[8]);
                else printf("%c",a[L%8]);
                L++;
            }
            printf("\n");
        }
        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enco-Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值