L1-6 斯德哥尔摩火车上的题 (15 分),C语言

该博客介绍了微博上一则关于瑞典斯德哥尔摩火车的趣闻,涉及到一个字符串处理算法。题目要求根据给定的伪代码处理两个字符串,判断是否能得到相同的输出。博主分享了一段C语言实现的代码来解决这个问题,并提到当字符串长度为1时的特殊情况。文章以一个有趣的编程挑战形式呈现,鼓励读者尝试解题。

 

上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
s = ‘’
a = ‘1112031584’
for ( i = 1 ; i < length(a);  i++ )  {undefined
        if (a[i] % 2 == a[i-1] % 2) {undefined
                s += max(a[i], a[i-1])
        }
}
goto_url(‘www.multisoft.se/’ + s)
其中字符串的 + 操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358(注意:比赛中千万不要访问这个网址!!!)。
当然,能通过上述算法得到 112358 的原始字符串 a 是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?
输入格式:
输入为两行仅由数字组成的非空字符串,长度均不超过 10的4次方,以回车结束。
输出格式:
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
输入样例 1:

1112031584
011102315849

输出样例 1:

112358

输入样例 2:

111203158412334
12341112031584

输出样例 2:

1123583
112358


 (PS:此题有个小捷径,嘿嘿,不知道出题者是特意降低难度还是故意留的,也就是根本不用管当两个字符串都是长度为 1 的这种情况,先看代码,下面再解释 )

思路:

        没有,直接暴力,怎么方便怎么来,字符串这玩意儿要是想故意刁难你,那绝对是一场噩梦,总有那么一两组数据要你改上几十次代码,最后还通过不了,你说气不气。所以,简单为上,最笨的办法最稳。

代码如下:

#include<stdio.h>
#include<string.h>
int main(){
    int i,la,lb,j=0;
    char aa[10001],aayi[10001],bb[10001],bbyi[10001];
    la=strlen(gets(aa));       //gets()获得键盘输入的字符串,以换行符结束;strlen()求字符串长度
    for(i=1;i<la;i++){
        if((aa[i]-'0')%2==(aa[i-1]-'0')%2)            //减 ‘0’是为了把ASCII码转换成对应数字
            aayi[j++]= aa[i]>aa[i-1]?aa[i]:aa[i-1];   //三目运算,取二者中大的那个
    }
    lb=strlen(gets(bb));
    j=0;
    for(i=1;i<lb;i++){
        if((bb[i]-'0')%2==(bb[i-1]-'0')%2)            //同上
            bbyi[j++]= bb[i]>bb[i-1]?bb[i]:bb[i-1];   //同上     
    }
    if(strcmp(aayi,bbyi)==0)        //strcmp()函数是比较两个字符串是否相等
        printf("%s\n",aayi);
    else
        printf("%s\n%s\n",aayi,bbyi);    
}
    


    
        (解释:这个题目很有意思,当两个输入的字符串长度都为 1 时,此时题中的算法并为起作用(也就是for循环根本没有运行),两个结果字符串依旧是空的,算是相同的那一种情况吧,结果是啥也没有输出或者输出个换行符\n,然而有意思的是出题者最后一句话是 “题目保证输出结果不为空。”,那就是说根本不用管长度为1的情况咯,嘿嘿嘿,好玩吧。

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

创业者-杨成淦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值