蓝桥1443-卡片解题记录

借他人的代码走了一遍,结构正确了,但发现思路或许有误,只是恰巧正确

看了官方题解分析,在纸上列出算法后写的(下)

第一次提交,错误了,因为for()没写';',

第二次,发现忘记写{}了一直在小循环,

第三次,发现光写t/10;不会改变t的值,得t=t/10

通过了!!!

回想解题过程,总结道理(对于此题是总结了刷题的作用之一)和方法(猜想了一套解题思路方法,即熟悉或具象出考察点名称,并对各个考察点【有具体名称,如枚举、取整数每一位上的数字、计数...这题中我用数组对应数字的方法把计数的压力变小变好理解了】进行分析,从而使考点具象化,可以使解题思路清晰

#include<stdio.h>

int main()

{

int a[10] = { 2021,2021,2021,2021,2021,2021,2021,2021,2021,2021 };

int i, t, q;

 

for (i = 1; ;i++)

{

for (t = i; t != 0;)

{

q = t % 10;

if (a[q] <= 0)

{

i--;

goto end;

}

a[q]--;

t = t / 10;

}

}

end:printf("%d", i);

return 0;

}

我这里下标q不用减1,因为刚好十进制0~9和下标0~9分别对应了~

i当枚举的数,因为要对i进行运算,而i得本身不能受干扰,为便操作,每次运算时,将t作为i的替身,便避免了只用i(即用i进行计算,代替上面代码中的t,减去关于t的for(){}),若需要调试时会看到 i值变来变去 的乱象(理论上我猜可以只用i,不过我还没尝试过实际可行性),使调试变得麻烦。

一个是用count记次执行数+1赋给i,要再跳出循环前注意赋 i=count-1;这个细节,因为值一层for,跳出用break或goto都行,输出 i 的值

一个是用t作替身进行运算,计数(计当所拼整数值达到i时0~9各数的剩余)并比较,因为两层for,应该只能用goto跳出循环后精确落点的特性,输出i-1的值

现先得出:对于 for(一;二;三)语句二不填 的情况,方法都可行,复杂程度也差不多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值