题解 | #挑7#

挑7

http://www.nowcoder.com/practice/ba241b85371c409ea01ac0aa1a8d957b

挑7

描述

输出小于 n 的与 7 有关数字的个数,包括 7 的倍数,还有包含 7 的数字(如 17 ,27 ,37 ... 70 ,71 ,72 ,73...)的个数(一组测试用例里可能有多组数据,请注意处理)
输入描述:
多组输入每组输入 1 个正整数 N 。( N 不大于 30000 )
输出描述:
不大于N的与7有关的数字个数,例如输入20,与7有关的数字包括7,14,17.
示例
输入:20
10
输出:3
1

方法一

思路分析

直接的思路为:如果给定的数小于7,则直接输出0;否则遍历,如果遍历的数是7的倍数或者数字中含有7(直接利用python中的判断字符串中是否存在’7‘即可)

核心代码

while True:
    try:
        n=int(input())
        sum=0
        if n<7:print(sum)
        else:
            sum=1
            for i in range(8,n+1):
                if i%7==0 or'7' in str(i):#7的倍数或者7在数字中
                    sum=sum+1
            print(sum)
    except:
        break
复杂度分析
  • 时间复杂度:时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$

方法二

思路分析

同方法一,如果给定的数小于7,则直接输出0;否则遍历,如果遍历的数是7的倍数或者数字中含有7,此时判断数中是否含有7是通过判断给定的数中个位十位百位千位以及以上的位数中是否存在7.

图解


核心代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n=0;
    while(cin>>n)
    {
        int sum=1;
        if(n<7) sum=0;
        else{
            for(int i=8;i<=n;i++)
            {
                int index_1=0;
                int index_2=0;
                if(i%7==0)
                    index_1=1;//判断是否为7的倍数
                while(i>0)
                {
                    if(i%10==7) index_2=1;//判断是否包括7
                    else i=i/10;
                }
                if(index_1||index_2)//如果i为7的倍数或者7出现在位数上
                    sum++;
            }
        }
        cout<< sum<<endl;
        
    }
    return 0;
}
此代码时间超出,因此进行改进。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n=0;
    while(cin>>n)
    {
        int sum=1;
        if(n<7) sum=0;
        else{
            for(int i=8;i<=n;i++)
            {
                if(i%7==0||i%10==7||(i%100)/10==7||(i%1000)/100==7||(i%10000)/1000==7)//如果i为7的倍数或者7出现在位数上
                    sum++;
            }
        }
        cout<< sum<<endl;
        
    }
    return 0;
}
复杂度分析
  • 时间复杂度:时间复杂度为$O(n)$
  • 空间复杂度:空间复杂度为$O(1)$

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
13730次浏览 132人参与
# AI面会问哪些问题? #
813次浏览 19人参与
# 米连集团26产品管培生项目 #
6870次浏览 223人参与
# 你的实习产出是真实的还是包装的? #
2431次浏览 47人参与
# AI时代,哪个岗位还有“活路” #
2495次浏览 49人参与
# 长得好看会提高面试通过率吗? #
2446次浏览 39人参与
# 巨人网络春招 #
11461次浏览 224人参与
# 你做过最难的笔试是哪家公司 #
1020次浏览 18人参与
# HR最不可信的一句话是__ #
914次浏览 31人参与
# 沪漂/北漂你觉得哪个更苦? #
908次浏览 29人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7898次浏览 43人参与
# XX请雇我工作 #
51120次浏览 171人参与
# 简历中的项目经历要怎么写? #
310755次浏览 4250人参与
# 简历第一个项目做什么 #
31964次浏览 354人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152726次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187486次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64398次浏览 857人参与
# 如果重来一次你还会读研吗 #
229937次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364032次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160794次浏览 1114人参与
# 你怎么看待AI面试 #
180527次浏览 1287人参与
# 投格力的你,拿到offer了吗? #
178044次浏览 889人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务