8-8 DAIRY

今天白天放假故没有考试

虫食算(p1092)

一开始稍微想了一下就码了几段代码,发现思路根本就是乱的而且很多细节几乎晕掉。所以开始在草稿纸上理思路,暂未码完代码,但整体dfs思路如下,不知道对不对…


例:
BADC
CBDA
DCCC
(首先边输入边处理, 将算式按照从上到下、从低位到高位一位位存进一个 s 结构体:C -> A -> C -> D -> D -> C…于是 s 中就按顺序存好了dfs要搜索的字母位置,并且根据 s[i] 的 i % 3 的余数可知这个位置的字母是第几行的)【有点绕…
1.当搜索对象为第一行和第二行时

  • 如果当前位置上的字母已匹配上数字,直接dfs(now+1)

  • 如果当前位置上的字母未匹配上数字{
    在0~9中找一个未被匹配的数字,将当前字母和这个数字匹配上,再dfs(now+1)
    }
    【然后要记得dfs后的取消匹配】

2.当搜索对象为第三行时

  • tmp1=前两行这个位上的字母和(注意是n进制下的和)【写的不清楚…自行体会手动加法吧】; tmp2=用来存进位。
  • 如果当前字母已匹配上数字{
    (1)如果当前字母匹配上的数字==(tmp1+tmp2)%n,那么更新tmp2为(tmp1+tmp2)/n,dfs(now+1);
    (2)如果当前字母匹配的数字!=(tmp1+tmp2)%n,那么return;
    }
  • 如果当前字母未匹配过数字{
    (1)检验(tmp1+tmp2)%n是否匹配了别的字母。如果是,则return;如果不是,则进行下一步;
    (2)将该字母与数字(tmp1+tmp2)%n匹配上,然后同样处理给下一次进位的tmp2,再dfs(now+1);
    }
    【如果是最高位还要注意tmp2只能为0】
    【同样记得dfs后的取消匹配】

3.之后的思路还有整个代码实现的细节我还没有想清楚,先不码了,全部理清楚再开始…


欢迎指出错误!!!拯救一个(说不定)在迷途的孩子!!!/滑稽

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值