澍梵. 发表于 2020-4-18 19:14:29

flag作用求讲解

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

if __name__ == '__main__':
    ans = 0
    n = int(input())
    for s in :
      flag = True
      for j in range(1, len(s)):
            if s > s:
                flag = False
                break
      if flag:
            ans += 1
    print(ans)         
【输入格式】30
【输出格式】 26

自己写的代码:

n=int(input())
m=0
for i in range(1,n+1):
    a=list(str(i))
    for n in range(1,len(a)):
      if a<a:
            break
      else:
            m+=1
print(m)

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

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

【问题】
1.能不能给我讲解下flag的作用及在正确代码中的作用?
2.1~9为什么也算是一个数位递增的数?

澍梵. 发表于 2020-4-18 19:15:05

感谢各位大佬帮我解答

澍梵. 发表于 2020-4-18 19:37:27

本帖最后由 澍梵. 于 2020-4-18 19:43 编辑

~

jkluoling1992 发表于 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<a:
            break
      else:
            m+=1
print(m)

还是加个flag方便点

jkluoling1992 发表于 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<a:
                break
            else:
                m+=1
print(m)
不加flag 就加个条件吧

qiuyouzhi 发表于 2020-4-18 20:24:38

flag就是一个标记,如果符合条件就设置为1.
然后在后面对这个标记进行判断。
页: [1]
查看完整版本: flag作用求讲解