本文主要是介绍L1-6 斯德哥尔摩火车上的题 (15 分),C语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
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);elseprintf("%s\n%s\n",aayi,bbyi);
}
(解释:这个题目很有意思,当两个输入的字符串长度都为 1 时,此时题中的算法并为起作用(也就是for循环根本没有运行),两个结果字符串依旧是空的,算是相同的那一种情况吧,结果是啥也没有输出或者输出个换行符\n,然而有意思的是出题者最后一句话是 “题目保证输出结果不为空。”,那就是说根本不用管长度为1的情况咯,嘿嘿嘿,好玩吧。
这篇关于L1-6 斯德哥尔摩火车上的题 (15 分),C语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!