郑州轻工业大学oj题解(c语言) 题解:1067: 有问题的里程表 难题探索(一)

作者 : 开心源码 本文共1198个字,预计阅读时间需要3分钟 发布时间: 2022-05-14 共183人阅读

之前发过几道简单的水题,也就是非常简单的题目,感觉反响不错,挺多人都找来做了,也算为自己的刷题量额外增加了数量~

前几天有个同学特意问我,诶,师兄,你这有水题,有没有那种水题的相反啊,就是那种特别难的题,能不能把这些题也找出来啊?emmmm,当时我二话不说截了个图给他。。。image.png
难度都标在题目的后面了呀,显著星级越高的题目就一定更难啊~

那么,今天就找其中一道相对有意思的难题来作为今天文章的内容吧~。


1067: 有问题的里程表

  • 题目形容
    某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,假如里程表显示339,汽车走过1公里之后,该里程表显示350。
  • 输入
    输入一个整数num,表示里程表显示的数值,1 < num < 1000,且肯定不含整数4。
  • 输出
    输出一个整数,为该汽车实际行驶的公里数。例如,假如该里程表显示55,则实际走过的公里 数是40。
  • 参考代码:
#include<bits/stdc++.h>using namespace std; int main(){    int num,c=0;    scanf("%d",&num);    for(int i=1;i<=num;i++){        if(i%10!=4&&i/10%10!=4&&i/100%10!=4){            c++;        }    }    printf("%d\n",c);    return 0;}
  • 代码解析:
  • 在开始解析之前,说明一下,所谓的难题,绝不意味着一道题的代码量有多大,算法有多复杂,而是全靠对题目的了解而已。我们首先看题目,一个里程表,表上有三位数字,但任何一位都不能显示4,则说明,表上的数字会跳过4而直接显示下一位,故最后显示的公里数会比与其预期走过的要多出跳过的那些距离。
  • 当然,题目这里要求我们算的是实际走过的路程,而非我们跳过的那些距离,所以在这里我们把总距离减去我们跳过的距离就能得出最终的答案~
  • 在这里,我们就有了两个选择,一,是求出我们跳过了的里程数,也就是单一位含有4情况的里程,这里的单一位包括百十个,需要我们分别计算,最终用总里程减去跳过的里程就可。二,是求出我们实际走了的里程,这个也不难了解,只需没有任何一位有4,我们就把这位算作实际走过的里程就可,比第一种要省下一步。
  • 这里,我们就以第二种为主进行分析。我们要求的是没有任何一位包括4的数,我们就把这个坏的里程输入循环来进行逐一判断排除。这里就要用到我们最初学过的知识,1004的数位分离,分别判断:个,十,百,各个位置都不=4的情况,我们把这些判断的例子用&&连在一起,只需三位数都不出现4,我们就把实际里程+1,循环计算完毕就可得出其实际走过的公里数。

大家有没有看完后豁然开朗,感觉实际也没这么难的感觉?所谓的难题,只需敢于去逐渐分析,找出题目数值之间的联络,想要完成也是非常简单的~

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 郑州轻工业大学oj题解(c语言) 题解:1067: 有问题的里程表 难题探索(一)

发表回复