?終于肝完了!有一說一,這一次難度肉眼可見的提升,終于明白程序員為什么會禿頂了(頭發(fā)真的禁不住薅?。4蠹液眠\!
第1關(guān):循環(huán)結(jié)構(gòu)-while與for循環(huán)
第1題 編程計算如下公式的值1^2+3^2+5^2+...+995^2+997^2+999^2并輸出結(jié)果
第2題 用while
語句完成程序邏輯,求如下算法可以求根號x的近似值。(例如,x
為3
時,算法輸出約為1.7320508
)。
算法如下:
-
輸入
x
,若x
為負(fù)數(shù),則輸出“無實數(shù)解”,算法結(jié)束; -
令
g=x/2
; -
通過如下公式計算誤差值,如果
∣x?g?g∣<10?6
,輸出g
,算法結(jié)束; -
否則,將
(g+x/g)/2
作為新的猜測值,仍記為g
。 -
重復(fù)步驟3和4
第3題:
用for循環(huán)完成下列程序,計算3位數(shù)的水仙花數(shù) 水仙花數(shù)是三位整數(shù),且各位數(shù)字的立方之和等于該數(shù),比如,因為
所以153是水仙花數(shù)。
?第一關(guān)還是簡單的熱熱身,熟悉for與while的基本用法,下一關(guān)!
from math import *
########## 第1題 ##############
i = 1 # 當(dāng)前計算的值
s = 0 # 計算出來的和
# 第1題
########### begin ##########
while i<1000:
s += i**2
i=i+2
######### end ####
print(s)
########## 第2題 ##############
x = int(input())
if x<0:
print('無實數(shù)解')
else:
g = x/2
#######begin##############
# 請輸入while循環(huán)控制語句
while abs(x-g*g)>pow(10,-6):
g=(g+x/g)/2
#######end#################
print("%.4f" %g)
########## 第3題 ##############
#計算并輸出三位數(shù)內(nèi)的水仙花數(shù)
#判斷一個三位數(shù)是否是水仙花數(shù),如果是輸出1,否則輸出0
def isflower(x):
# 函數(shù)說明:
#參數(shù) x為一個3位數(shù)
#返回值為1或0
####### Begin #########
a,b,c=x//100,x//10%10,x%10
t=(a**3)+(b**3)+(c**3)
if t==x:
return 1
else:
return 0
####### End ########
#函數(shù)調(diào)用求三位數(shù)內(nèi)的水仙花數(shù)并輸出
####### Begin #########
# 請在此輸入for循環(huán)表達(dá)式
for i in range(100,1000):
if isflower(i)==1:
print(i)
####### End ########
第2關(guān):循環(huán)嵌套-特殊圖形的輸出
第1題:從鍵盤輸入m行n列,在屏幕上輸出m行n列的*行圖案 例如輸入6,7 輸出為:
第2題:從鍵盤輸入m行,在屏幕上輸出m行的直角圖案
例如輸入:8 輸出為:
第3題:從鍵盤輸入m行,在屏幕上輸出m行的等腰三角形圖案
例如輸入9 輸出為:
第二關(guān)已經(jīng)稍微有一點難度了,常規(guī)做法是從頭到尾雙重循環(huán),當(dāng)然,也可逃課:
例如,第一題也可以這么寫:
m,n = eval(input())
print(('*'*n+'\n')*m)
第二題也可以這么寫:
n = eval(input())
for i in range(n):
print('*'*(2*i-1))
接下來是雙重循環(huán)的所有代碼:
#第一題:從鍵盤輸入m行n列,在屏幕上輸出m行n列的*行圖案
m,n= eval(input())
#請在下面編寫代碼
# ********** Begin ********** #
for i in range (0,m):
for j in range (0,n):
print('*',end='')
print('',end="\n")
# ********** End ********** #
#第二題:從鍵盤輸入m行,在屏幕上輸出m行的直角圖案
m=eval(input())
#請在下面編寫代碼
# ********** Begin ********** #
for i in range (0,m):
for j in range (0,2*i+1):
print('*',end='')
print('',end="\n")
# ********** End ********** #
#第三題:從鍵盤輸入m行,在屏幕上輸出m行的等腰三角形圖案,試著用函數(shù)的方式來實現(xiàn)圖形的繪制
def drawPic(n):
#函數(shù)說明
#參數(shù)n代表圖案的行數(shù)
#函數(shù)無返回值
#請在下面編寫代碼完成
# ********** Begin ********** #
for i in range (0,m):
for j in range (0,m-i-1):
print(' ',end='')
for j in range (0,2*i+1):
print('*',end='')
print('',end="\n")
# ********** End *********** #
m=eval(input())
drawPic(m)
第3關(guān):循環(huán)綜合-特殊數(shù)問題
第1題-斐波那契數(shù)列
在數(shù)學(xué)上,斐波那契數(shù)列以如下被以遞推的方法定義:F(1)=1,F(xiàn)(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)斐波那契 請完成求第n項斐波那契數(shù)的程序并輸出結(jié)果 輸入輸出格式如下: 輸入:5 輸出:5
第2題-條件數(shù)的顯示
用while
語句完成程序,輸出0
至N之間
的所有同時為2
、3
和5
的倍數(shù)的數(shù)。 輸入輸出格式如下:用空格作為分隔符 輸入:100 輸出:0 30 60 90
第3題-素數(shù)問題
完成程序,輸出輸出0
至N之間
的素數(shù)。 輸入輸出格式如下:用空格作為分隔符
輸入:10 輸出:2 3 5 7
第4題-最大公約數(shù)與最小公倍數(shù)
完成程序,求最大公約數(shù)計算。從鍵盤接收兩個整數(shù),編寫程序求出這兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)。(最大公約數(shù)可用輾轉(zhuǎn)相除法求,最小公倍數(shù)則用兩數(shù)的乘積除以最大公約數(shù)) 輸入輸出格式如下: 輸入:12,18 輸出: 最大公約數(shù):6 最小公倍數(shù):36
第三關(guān)對我們的數(shù)學(xué)提出了要求。第一題斐波那契數(shù)列,如果用F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)來直觀表達(dá),我們可以用列表遞歸的方式表達(dá):
#用遞歸的方法,加上for循環(huán),把每次循環(huán)產(chǎn)生的新項增加到數(shù)列最后,最后一次性輸出list
def fubonacci3(n):
list = []
for i in range(n):
if i == 0 or i == 1:
list.append(1)
else:
list.append(list[i-2] + list[i-1])
return list
而最簡單的方式就是不斷的兩個變量同時賦值,形成斐波那契數(shù)列。
第五題就是從小到大不斷的尋找公約數(shù),然后不斷的賦值給它,當(dāng)它不再被賦值時就是最大公約數(shù)
#第一題
#定義一個求第n項斐波那契數(shù)的函數(shù)
def fibNumber(n) :
#函數(shù)說明
#參數(shù)n為第n項斐波那契數(shù),第1,2項為1,1
#返回第n項值
#********** Begin ********** #
a,b = 0,1
for i in range (n):
a,b = b,a+b
return a
#********** End ********** #
#請不要修改下面的代碼
m = int(input())
print(fibNumber(m))
print(20*'*'+'\n',end='')
#第二題:可試著用非函數(shù)的方式寫程序,注意輸出數(shù)據(jù)格式
n =eval(input())
# 請在下面編寫代碼
# ********** Begin ********** #
i=0
while i<=n:
if i%5==0 and i%3==0 and i%2==0:
print (i,end=' ')
i=i+10
# ********** End ********** #
print('\n'+20*'*'+'\n',end='')
#第三題
#定義一個判斷x是否是素數(shù)的程序
def isPrime(x):
#函數(shù)說明:
#參數(shù)x為>=2的整數(shù)
#返回值為1或0
# ********** Begin ********** #
for i in range(2,x):
if x%i ==0:
return 0
return 1
# ********** End ********** #
# 請不要修改下面的代碼
N = int(input())
#求0-N之間的素數(shù)并輸出,注意數(shù)據(jù)的輸出格式
# ********** Begin ********** #
for i in range (2,N+1):
if isPrime(i)==1:
print(i,end=' ')
# ********** End ********** #
print('\n'+20*'*'+'\n',end ='')
#第四題
#定義一個求兩個數(shù)的最大公約數(shù)的函數(shù)
def gcd(a,b):
#函數(shù)說明
#參數(shù)a,b為兩個整數(shù),并且a>b
#返回兩個數(shù)的最大公約數(shù)
# ********** Begin ********** #
for i in range(1,max(a,b)+1):
if a%i==0 and b%i==0:
j = i
return j
# ********** End ********** #
# 請不要修改下面的代碼
m,n = eval(input())
#函數(shù)調(diào)用求最大公約數(shù)保存在gcdnum中
# ********** Begin ********** #
gcdnum = gcd (m,n)
# ********** End ********** #
print("最大公約數(shù):%d"% gcdnum)
print("最小公倍數(shù):%d"%((m*n)/gcdnum))
print(20*'*',end='')
第4關(guān):循環(huán)綜合-數(shù)列問題
第1題----求π/4
用循環(huán)的方式求π/4≈ 1-1/3+1/5-1/7+......直到最后一項絕對值小于le?6(即10?6)為止,結(jié)果保留小數(shù)點后10位
第2題----數(shù)列和
完成程序,求:1-3!+5!-7!......(-1)n-1(2n-1)!,求前n的項的和。 輸出格式如下: 輸入:4 輸出:數(shù)列前4項的和為-4925
第3題----求sin(X)
完成程序,從鍵盤輸入x的值,求
直到最后一項絕對值小于le?7(即10?7)為止(注:x為弧度值),結(jié)果保留小數(shù)點后10位。 說明:輸入角度值,再轉(zhuǎn)換成弧度值 輸出格式如下: 輸入:30 輸出:output=0.4999999919
?第四關(guān) 個人感覺第四關(guān)的難點在于初值的賦值以及while語句中的前后順序,弄清楚了就如同砍瓜切菜。
#第1題:用循環(huán)的方式求π/4≈ 1-1/3+1/5-1/7+......直到最后一項絕對值小于1e?6(即10?6)為止,保留小數(shù)點后10位
import math
# ********** Begin ********** #
S=0
i=1
t=1
flag=1
while abs(i)>pow(10,-6):
S+=i
t+=2
flag=-flag
i=(1/t)*(flag)
# ********** End ********** #
# 請不要修改下面的代碼
print("數(shù)列和為:%.10f" % S )
#0.7853986634
#第2題求:1-3!+5!-7!......(-1)n-1(2n-1)!,求前n的項的和
#函數(shù)定義求前n項數(shù)列和
def sumSequ(n):
#函數(shù)說明
#參數(shù)n為數(shù)列前n項
#返回前n項的和
# 請在下面編寫代碼
# ********** Begin ********** #
i=1;
t=1;
Sum=0;
flag=1;
while i<=n :
Sum=Sum+t*flag
i+=1
t=t*(2*i-2)*(2*i-1)
flag=-flag
return Sum
# ********** End ********** #
# 請不要修改下面的代碼
m =int(input()) #從鍵盤輸入 m值
s = sumSequ(m) #函數(shù)調(diào)用求數(shù)列和
print("數(shù)列前%d項的和為%d"%(m,s))
#第3題
from math import *
def calSinx(x):
#函數(shù)說明:
#參數(shù)x為弧度值
#返回數(shù)列和的結(jié)果,保留小數(shù)點后10位
#請在下面編寫代碼
# ********** Begin ********** #
S=0
i=x
t=1
while abs(i)>pow(10,-7):
S += i
t+=2
i=-(i*x*x)/((t-1)*t)
return S
# ********** End ********** #
# 請不要修改下面的代碼
theta= eval(input()) #輸入角度值
x =radians(theta)
Sx = calSinx(x)
print("output=%.10f"%(Sx))
第5關(guān):循環(huán)綜合-天天向上的力量
任務(wù)一:俗語“三天打魚兩天曬網(wǎng)”,一年下來能力值又會是多少呢?請補(bǔ)全代碼完成程序編寫 #三天打魚兩天曬網(wǎng) dayup, dayfactor = 1.0, 0.01
任務(wù)二:如果按工作日5天學(xué)習(xí),周末2天休息每天相比前一天下降1%,工作日要努力到什么程度,一年后的水平才能與每天努力1%取得的效果一樣呢?請補(bǔ)全代碼完成程序編寫。以0.001為dayfactor的增量值。
任務(wù)三:盡管每天堅持,但人的能力發(fā)展并不是無限的,它符合特定模型,假設(shè)能力增長符合以下模型:以7天為一周期,連續(xù)學(xué)習(xí)3天能力值不變,但從第4天開始至第7天每天能力增長為前一天的1%,如果7天中有一天間斷學(xué)習(xí),則周期從頭計算,請編寫程序,如果初始能力為1,固定每10天休息一天, 365天后能力值是多少,請補(bǔ)全代碼完成程序編寫。
第五關(guān) 終于來到了最后一關(guān),這一關(guān)絕對是我目前遇到的最難一關(guān)。先不說繞來繞去的邏輯,光是這大段的文字已經(jīng)能讓人頭痛一會了,這題光是題干我都讀了半個小時。我來幫大家梳理一下:
任務(wù)一:做三休二,效率固定,較為簡單
任務(wù)二:做五休二,這里注意工作日的工作效率為變量,而休息日的遺忘效率為不變量,注意區(qū)別。變量范圍記得一定是小于等于而非直接等于,可能有微小誤差導(dǎo)致循環(huán)停不下來。
?上面是錯誤示范?。?!雙重循環(huán)+等于才停止的雙重buff直接給CPU干燒了!文章來源:http://www.zghlxwxcb.cn/news/detail-715145.html
任務(wù)三:做九休一,又遇到每七天一個輪回,通俗的來說遇到七的倍數(shù)與十的倍數(shù)都要避讓,雖然這題這樣做做對了,但是我還是有一個疑問,休息的時候不會遺忘嗎?文章來源地址http://www.zghlxwxcb.cn/news/detail-715145.html
from math import *
#任務(wù)一:三天打魚兩天曬網(wǎng)
dayup, dayfactor = 1.0, 0.01
#請在下面編寫代碼
# ********** begin ********** #
i=0
while i<365:
dayup = dayup*pow((1+dayfactor),3)*pow((1-dayfactor),2)
i+=5
# ********** End ********** #
# 請不要修改下面的代碼
print("{:.2f}.".format(dayup))
#任務(wù)二:天天向上的力量
import math
dayup, dayfactor = 1.0, 0.01
ddup= math.pow((dayup+dayfactor),365)
#print("天天向上的力量: {:.2f}.".format(ddup))
#請在下面編寫代碼
# ********** Begin ********** #
def dayup(df):
dayup = 1
for i in range(365):
if i % 7 in [6, 0]:
dayup = dayup * (1 - 0.01)
else:
dayup = dayup * (1 + df)
return dayup
dayfactor = 0.01
while dayup(dayfactor) <= ddup:
dayfactor += 0.001
# ********** End ********** #
# 請不要修改下面的代碼
print("{:.4f}.".format(dayfactor))
#任務(wù)三:天天向上續(xù)
from math import *
Restday = 10 #休息10天,
dayup, dayfactor = 1.0, 0.01 #初始值
#請在下面編寫代碼
# ********** Begin ********** #
for i in range(365):
if 0<i%10<=3 or 0<i%7<=3:
dayup=dayup
else:
dayup=1.01*dayup
# ********** End ********** #
# 請不要修改下面的代碼
print("{:.2f}".format(dayup))#
到了這里,關(guān)于hnu計算機(jī)與人工智能概論答案3.15的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!