defchange(bills): if bills[0]!=5: returnFalse else: bills2 = bills[1:] five_money=1 ten_money=0 for i in bills2: if i ==5:# 有支付 5元的 five_money +=1 elif i ==10:# 有支付10元的 five_money -=1 ten_money +=1 else:# 有支付20元的 if ten_money >=1: ten_money -=1 five_money -=1 else: five_money -=3 if five_money <0or ten_money <0:#看看是否是把5元的和10元的给减没了 returnFalse returnTrue if __name__=='__main__': bills =list(map(int,eval(input()))) # bills = eval(input()) #print(bills) canchange = change(bills) if canchange==False: print('False',end="") else: print("True",end="") # a = list(map(int,eval(input()))) # print(a)
2、串珠子
A 恰巧碰到kekao师傅在串手链。哦,原来是kekao师傅觉得买的手链没有自己做的更有心意,于是他买了一堆珠子准备自己做一个,但他是一个重度选择困难症患者,于是Alan提议,至少保证手链一半以上的位置有珠子。但是Alan和kekao不知道有多少种串法,想请你帮忙计算一下。对于一个长度为n的绳子来说,每一个位置可以放上一个珠子,有珠子表示为1,没珠子表示为0。 输入格式:
要点: 通过题意我们可以知道对于长度为n的绳子,01串的串法数量是2^ n。而我们需要将其排序组合,不难发现对于长度为n,数值最小的串是n个0,最大的是n个1,这与二进制非常相似。事实证明,对于长度为n的01串,如果我们将其看成二进制,那么它转化为十进制的数值范围是0 ~ 2^ n -1。所以问题就转化为求0~ 2^ n-1的二进制,并判断01串中0与1的数量即可。但是我们知道2^n存在指数爆炸,所以要考虑时间问题,此处我们采用按位与运算,而不是内置bin()函数,可以大幅降低时间。
n =int(input()) amo =0 deff(r): global amo st ="" while(r): # print(r&1,end=" ") st +=str((r &1)) r >>=1 while(len(st)< n): st +="0" if st.count("1")>len(st)/2: print(st[::-1]) amo +=1 temp =2**n for i inrange(0,temp): f(i) print("amount = {}".format(amo))
3、跳楼梯
为了锻炼,A 一次只跳1阶楼梯,或者一次跳上2阶楼梯。问Alan要上一个n阶的楼梯,最多有多少种不同上楼的走法? 要点:设结果为 x
res =[] n =int(input()) res.append(1) res.append(2) for i inrange(2,n): res.append(res[i-1]+ res[i-2]) print(res[n-1])
4、素数对
将1……N的数字按照升序排列,在下一行按照降序排列。
1 2 3 … … N-1 N N N-1 N-2 … … 2 1
按照上述排列,对于给定的n,有多少个素数对? 输入格式:
在一行中给定一个整数N (1≤N≤10^4)
输出格式:
输出一个整数表示素数对的个数
输入样例:
3
输出样例:
1
样例说明:
1 2 3 3 2 1 素数对是: | 2 | | 2 |
要点:对于上一列的第i个,在下一列与其成对的存在是 n+1-i。
defprime(num): if num ==1: return0 elif num ==2: return1 else: for i inrange(2,int(num**0.5)+1): if num%i ==0: return0 return1 n =int(input()) res =0 if n <2: res =0 else: for i inrange(2,n+1): if prime(i)and prime(n+1-i): res +=1 print(res)