| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
【问题描述】 
 一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。 给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?  
【输入格式】30  
【输出格式】 26 
正确的代码是: 
 
- if __name__ == '__main__':
 
 -     ans = 0
 
 -     n = int(input())
 
 -     for s in [str(i) for i in range(1, n + 1)]:
 
 -         flag = True
 
 -         for j in range(1, len(s)):
 
 -             if s[j - 1] > s[j]:
 
 -                 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[n]<a[n-1]:
 
 -             break
 
 -         else:
 
 -             m+=1
 
 - print(m)
 
 
  复制代码 
【输入格式】30  
【输出格式】 17 
 
自己写的代码和源代码差不多,只是flag判断条件,但是结果却是不一样的,自己分部输出的时候发现正确代码将1~9也作为了一个数位递增的数,但个人觉得1~9不能作为一个数位递增的数。 
 
【问题】 
1.能不能给我讲解下flag的作用及在正确代码中的作用? 
2.1~9为什么也算是一个数位递增的数?
 
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方便点 
 
 
 |   
 
 
 
 |