本文目錄一覽:
- 1、python n個硬幣中找一個假幣,且已知假幣較輕,怎麼用遞歸和非遞歸兩種方法求
- 2、用python做一個程序:扔100次硬幣,然後分別顯示出擲出正面和反面的次數
- 3、新人,求大神幫助:用python 寫兩個程序 1,有30枚硬幣,其中一枚是假幣,假幣較輕,現有一
- 4、python 找零錢
python n個硬幣中找一個假幣,且已知假幣較輕,怎麼用遞歸和非遞歸兩種方法求
思路:假設有數組arr,裡面的int值代表銀幣重量,下標代表第幾個銀幣。
循環(非遞歸):把數組第一個值賦值給變數tmp,從第二個變數循環到最後一個,比較循環里的變數和tmp值,如果不等,就返回小數下標。
遞歸:用二分思想,銀幣分2堆(不能均分時把中間那個留出來),取重量小的那堆繼續二分。最後只剩下一個時就是所求
下面這種寫法是返回下標的。也可以把硬幣假設成一種數據類型,然後返回那個類型
#!/usr/bin/python
# -*- coding: utf-8 -*-
#返回最小值下標
def getMin(arr1):
if len(arr1)==0:return -1
tmp=arr1[0]
index=0
for cur in arr1:
if tmp!=cur:
return 0 if tmpcur else index
index+=1
return -1
real_index=0
#返回最小值下標 遞歸
def getMinRecursion(arr1):
global real_index
n=len(arr1)
if n==0:return -1
if n==1:return real_index
if n==2:return real_index if arr1[0]arr1[1] else real_index+1
sum1=sum(arr1[0:int(n/3)])
sum2=sum(arr1[int(n/3):int(n/3)*2])
if sum1==sum2:
real_index+=int(n/3)*2
return getMinRecursion(arr1[int(n/3)*2:n+1])
if sum1sum2:
return getMinRecursion(arr1[0:int(n/3)])
else:
real_index+=int(n/3)
return getMinRecursion(arr1[int(n/3):int(n/3)*2])
arr=[1,1,1,1,1,1,0,1,1]
print(“%d”%getMin(arr))
print(“%d”%getMinRecursion(arr))
用python做一個程序:扔100次硬幣,然後分別顯示出擲出正面和反面的次數
7行代碼即可寫出程序,詳細步驟:
1、首先打開python自帶的IDLE,打開IDLE並ctrl+n新建如圖界面。
2、導入random模塊的choice功能。
3、在列表中放置up和down這兩個元素,這裡表示正面朝上和正面朝下。因為不考慮硬幣立著的奇葩設定,所以只加這個上和下。並且把列表賦予給coin這個變數。
4、接下來使用for循環來遍歷,range後面為拋硬幣次數,這裡我想程序運行一次只拋硬幣一次,所以range後面設置為1。
5、這一行,就是if判斷了,如果隨機從列表中抽取到了up。
6、那麼就要輸出「正面」。
7、否則,就輸出「反面」。
8、至此此代碼完成,按F5即可運行,運行一次就拋一次。
新人,求大神幫助:用python 寫兩個程序 1,有30枚硬幣,其中一枚是假幣,假幣較輕,現有一
NO.1
#encoding: UTF-8
”’
只想到用二分法查找
”’
import random
def FindMoney(aList):
if len(aList) == 2:
if aList[0] aList[1]:
print aList[1]
else:
print aList[0]
else:
if sum(aList[len(aList)/2:]) sum(aList[:len(aList)/2]):
FindMoney(aList[:len(aList)/2])
else:
FindMoney(aList[len(aList)/2:])
a = [1] *29 + [0]
a.sort(lambda a,b: random.randint(-1, 1)) #亂序
print a
FindMoney(a)
NO.2,詳細解釋請參照
#encoding: UTF-8
from collections import deque
import random
def Matchschedule(team):
c = team[1:]
c = deque(c)
for i in range(len(team) – 1):
c.appendleft(team[0])
for j in range(len(team)/2):
print c[j], “—–“, c[-1-j]
c.popleft()
c.append(c.popleft())
if __name__ == “__main__”:
a = [i for i in range(1,33)]
Matchschedule(a)
python 找零錢
按照題目要求編寫的Python找零錢程序如下
def smallchange(money):
fifty=50
ten=10
five=5
one=1
print(money//fifty,end=’ ‘)
money=money%fifty
print(money//ten,end=’ ‘)
money=money%ten
print(money//five,end=’ ‘)
money=money%five
print(money//one)
l=[]
n=int(input())
for i in range(n):
l.append(input())
for i in range(n):
pay,payable=l[i].split(‘ ‘)
money=int(pay)-int(payable)
smallchange(money)
源代碼(注意源代碼的縮進)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/307120.html