本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目来自牛客网的华为机试题库,本题目为中等题HJ55 挑7
HJ55 挑7
描述
输出 1到n之间 的与 7 有关数字的数字的个数。
一个数与7有关是指这个数是 7 的倍数,或者是包含 7 的数字(如 17 ,27 ,37 ... 70 ,71 ,72 ,73...)
数据范围: 1≤n≤30000
输入描述:
一个正整数 n 。( n 不大于 30000 )
输出描述:
一个整数,表示1到n之间的与7有关的数字个数。
示例1
输入:
20
输出:
3
说明:
输入20,1到20之间有关的数字包括7,14,17共3个。
代码
要包含最后一个数字
while True:
try:
n = int(input())
count = 0
for i in range(1,n+1):
if i % 7 == 0:
count += 1
else:
k = i
while k >0:
if k % 10 == 7:
count += 1
break
k //=10
print(count)
except:
break
解析
被挑出来的数可以分为两种,一种是7的倍数,另一种是任意一位上含有7。7的倍数比较好找,整除7余数为0即可,任意一位上含7比较难,需要每一位上的数都遍历一下。值得注意的是不能忘记最后一个数!也就是range()应该是7到n+1,因为range不含最后一个数,虽然我知道大家应该都知道,但是我总是忽略啊,这是用来提醒我自己的,下次一定要记住啊!
其实感觉这道题相比其他中等题挺简单的,不知道为啥分类到了中等题。所有是题确实简单了,还是我飘了。
具体方法:
1.读入数据,用if语句进行判断,如果是7的倍数直接计入
2.按照从个位向前的顺序考察每个数是否为7,即整除10是不是余数为7,然后不断的把这个数除10取整
3.到n即可,输出计数的值,这个值就是满足条件的数的个数