鱼C论坛

 找回密码
 立即注册
查看: 903|回复: 5

[已解决]flag作用求讲解

[复制链接]
发表于 2020-4-18 19:14:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【问题描述】
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。 给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
【输入格式】30
【输出格式】 26
正确的代码是:

  1. if __name__ == '__main__':
  2.     ans = 0
  3.     n = int(input())
  4.     for s in [str(i) for i in range(1, n + 1)]:
  5.         flag = True
  6.         for j in range(1, len(s)):
  7.             if s[j - 1] > s[j]:
  8.                 flag = False
  9.                 break
  10.         if flag:
  11.             ans += 1
  12.     print(ans)           
复制代码

【输入格式】30
【输出格式】 26

自己写的代码:

  1. n=int(input())
  2. m=0
  3. for i in range(1,n+1):
  4.     a=list(str(i))
  5.     for n in range(1,len(a)):
  6.         if a[n]<a[n-1]:
  7.             break
  8.         else:
  9.             m+=1
  10. print(m)
复制代码

【输入格式】30
【输出格式】 17

自己写的代码和源代码差不多,只是flag判断条件,但是结果却是不一样的,自己分部输出的时候发现正确代码将1~9也作为了一个数位递增的数,但个人觉得1~9不能作为一个数位递增的数。

【问题】
1.能不能给我讲解下flag的作用及在正确代码中的作用?
2.1~9为什么也算是一个数位递增的数?
最佳答案
2020-4-18 20:07:38

n=int(input())
m=0
for i in range(1,n+1):
    a=list(str(i))
    for n in range(1,len(a)): // 这一行,当遍历1-9,range(1,1),返回空,没有进去计数,因此少了9次
        if a[n]<a[n-1]:
            break
        else:
            m+=1
print(m)

还是加个flag方便点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-18 19:15:05 | 显示全部楼层
感谢各位大佬帮我解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-18 19:37:27 | 显示全部楼层
本帖最后由 澍梵. 于 2020-4-18 19:43 编辑

~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-18 20:07:38 | 显示全部楼层    本楼为最佳答案   

n=int(input())
m=0
for i in range(1,n+1):
    a=list(str(i))
    for n in range(1,len(a)): // 这一行,当遍历1-9,range(1,1),返回空,没有进去计数,因此少了9次
        if a[n]<a[n-1]:
            break
        else:
            m+=1
print(m)

还是加个flag方便点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 20:09:59 | 显示全部楼层
n=int(input())
m=0
for i in range(1,n+1):
    a=list(str(i))
    if len(a) == 1:
        m += 1
    else:
        for n in range(1,len(a)):
            if a[n]<a[n-1]:
                break
            else:
                m+=1
print(m)
不加flag 就加个条件吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-18 20:24:38 | 显示全部楼层
flag就是一个标记,如果符合条件就设置为1.
然后在后面对这个标记进行判断。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-20 10:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表