牛客网学习笔记(HJ55 挑7)

112 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目来自牛客网的华为机试题库,本题目为中等题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即可,输出计数的值,这个值就是满足条件的数的个数