赛码网刷题python

偶尔一道编程题锻炼思维

1.题目股神http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1664&konwledgeId=134

观察规律发现减法的位置的规律,只要找到当前数前面有几个减法,可以求得输出。例如 14 - 3*2=8 (三个减号)

代码:

#!/usr/bin/env python  
# coding=utf-8 
while 1 :
    x =int(raw_input())
    if x>2:
        sub = 1
        count =3
        for i in range(3,(x+1)):
            count += i
            if count <= x:
                sub +=1
            else:
                out = x- sub*2
                print(out)
                break
    else:
    	print(x)

这样做答案是对的但是内存限制超标了

代码:

#!/usr/bin/env python  
# coding=utf-8 
while 1 :
    x =int(raw_input())
    k = 3
    n = 3
    while x-k>=n:
        n+=k
        k+=1
    if  x<3:
        print(x)
    else:
        print(int(x-(k-2)*2))

这里把for改成while,内存就降下来了。所以使用while比for要省内存要快。

 

2.题目翻转数组http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1656&konwledgeId=134

这道题没有做出来!!!

n=int(raw_input())
a=[int(i) for i in raw_input().split()]
b=sorted(a)
c=[a[i] for i in range(n) if a[i]!=b[i]]
d=[b[i] for i in range(n) if a[i]!=b[i]]
c.reverse()
if c==d:
    print("yes")
else:
    print("no")

看了人家的代码分析下:先对输入的数进行一个排序,在原始的数组中和排序的数组中找到他们不相同的部分,看看反转后相等吗?相等yes,不相等 no,就是真简单可以没有想到。

1.列表推导式书写形式:  

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

 

3.题目:约德尔测试http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1677&konwledgeId=134

a = raw_input()    
b = raw_input()    
c = [ ]  
for i in a:        
	if i.isalnum():            
		c.append(1) 	     
	else:            
		c.append(0)  
b = list(b) 
d = [b[i] for i in range(len(b)) if  int(b[i])== int(c[i]) ]
percent = 100*float(len(d))/len(b) 
print("%.2f%%" % percent)

学会怎么判断数字和字母用 .isalnum(),练习了上次学习到的列表推导式

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值