这道题在百炼上的编号是:1657
这道题明显比昨天那道鸡兔同笼的题难度大了很多
总结一下一开始我没有想出解决方法死在了三点上:
1、一直纠结于数据的存储方式,到底用一维数组还是二位数组的问题上,忽略了重点;
2、行走规则,最短步数无从下手,不知道用什么来衡量。
3、横坐标为a~z,纵坐标为1~8,输入还要求a1 b3.字符和数字。。这怎么定义变量类型。。
请教了师兄,他一般遇到问题后无解时该怎办,师兄说,他遇到不会做或没有头绪的问题时,一般是上网查相关的,或是看书中的文字部分,不看代码内容。
遂看配套书中的文字解释
哎呀,文字解析是算法的灵魂呀,看完豁然开朗,至少把重点放在了第二个问题上,
看了王和后的行走步数的计算的数学模型的简历,自己仿照同样的方法
写了车和象的行走的数学公式,感叹编程人的聪明,竟然可以分情况,用横纵坐标的水平距离和垂直距离
就可以将所有的情况表示出来(无非就是那几种情况,是自己想的太复杂了,并不会把复杂问题简单化),我怎么没想到呢,还是太嫩了。。。
将核心的计算方法弄好后,开始想怎么存储数据
这里用到了字符串常量,在早晨的时候犯了一个比较低级的错误,耽误了很长时间,
字符串常量在存储时,比如说c program,用字符数组存储
char szString[10];
它在内存中是这样的:c program\0
坑爹呀,把\0给忘记了。。而且申请的空间那么小,所以就导致错误了。
mark:
字符数组的每个元素占据一个字节,可以用字符数组来存放字符串,此时数组中必须包含'\0'字符,代表字符串的结尾,因而字符数组的元素个数,应该不少于被存储字符串的个数加一。
程序大概写好了,在之后又犯了两个错误用了很长时间排查
一是 象的步数计算自己写的有错误。没有发现本质规律,再次看了文字讲解,屡清楚后改正了。
二是 题目的要求是{输入N行,输出N行};但是自己只实现了,{一次输入,一次输出},多次操作的code,不知道该怎么处理,网上查了资料,几乎都是实现的后者,后来再研究了好长时间最终实现了,提交成功
将这段代码贴过来,以备以后遇到相同的情况时进行处理。多次输入字符串常量如何正确存储进a、b字符数组中。
int i,t;
scanf("%d",&t);
if(t<0||t>20){
printf("error");
}
char a[100],b[100];
for(i=0;i<t*2;i=i+2)//处理了多行输入对应多行输出的问题,而不是一行输入一行输出的循环
{
scanf("%s %s",&a[i],&b[i]);
}
3次 Wrong Answer 1次 Accepted
本文分享了一道编程题的解题过程,包括算法思路的探索、数据存储方式的选择及字符串常量处理等细节,强调了算法理解的重要性。

246

被折叠的 条评论
为什么被折叠?



