Q2_棋盘上的距离做题总结

本文分享了一道编程题的解题过程,包括算法思路的探索、数据存储方式的选择及字符串常量处理等细节,强调了算法理解的重要性。

这道题在百炼上的编号是: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值