解题思路:用bin()转变为2进制,分两种情况111000和1100111000110,前者增加一位1,后者从后数,遇到第一个01,变为10,并将遇到的1变道最后
注意事项:
参考代码:
def f(n):
sn=bin(n)
sn=sn[2:]
listn=[int(i) for i in sn]
count=0
for i in range(len(listn)):
count+=listn[i]
#111000
temp=0
l=len(listn)
for i in range(count):
temp+=listn[i]
if temp==count:
listn=[0]*(l+1)
listn[0]=1
for i in range(l,l-count+1,-1):
listn[i]=1
else:
t=0
val=0
for i in range(l-1,1,-1):
if listn[i]==1:
t+=1
print(t)
if listn[i]==1 and listn[i-1]==0:
listn[i-1],listn[i]=1,0
val=i
break
for i in range(l-1,l-t,-1):
listn[i]=1
print(i," ",listn[i])
for i in range(l-t,val,-1):
listn[i]=0
binstr =''.join(str(i) for i in listn)
value=int(binstr,2)
print(value)
print(bin(value))
print(n," ",sn,count)
while 1:
n=int(input())
if n==0:
break
else:
f(n)
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复