第六届蓝桥杯--奇妙的数字和移动距离
奇妙的數字
題目描述
小明發現了一個奇妙的數字。它的平方和立方正好把0~9的10個數字每個用且只用了一次。
你能猜出這個數字是多少嗎?
也可以先找出第一個使temp長度為十的數,即直接令num為47
num = 47 while 1:temp = (str(num**2)+str(num**3))for i in temp:if temp.count(i) != 1:breakelse:print(num)breaknum += 1答案:69
移動距離
題目描述:
X星球居民小區的樓房全是一樣的,并且按矩陣樣式排列。
其樓房的編號為 1,2,3…
當排滿一行時,從下一行相鄰的樓往反方向排號。
比如:當小區排號寬度為 6 時,開始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 …
我們的問題是:已知了兩個樓號 m和 n,需要求出它們之間的最短移動距離(不能斜線方向移動)。
輸入格式
輸入共一行,包含三個整數 w,m,n,w 為排號寬度,m,n為待計算的樓號。
輸出格式
輸出一個整數,表示 m,n兩樓間最短移動距離。
數據范圍
1≤w,m,n≤10000
?
式s解析:m和n減一,是因為當m或n剛好為w的倍數時,會被歸入下一列,所以減一后再求整商,在相減求絕對值(因為不知道m和n的大小),即可得兩樓的行距
奇數時:
式ans解析:(min(m,n)-1)//w+1是樓號小的數的行,再乘以牌號寬度w,就是改行最大的數,然后減去樓號小的數,再乘2加1加上牌號小的數,即為該數正下方的高一行數,所以據牌號大的樓的行數減一,所以再加上(s-1)[即現在所差行數]*w,就得到了樓號小的正下方和樓號大的同行的數,該數與樓號大的數相減的絕對值即為在該行所走的最短距離,最后加上兩棟行差距s,即為結果。
樓號小的那行最大的數:w*((min(m, n)-1)//w+1) 樓號下的數比它下面的數小的值:(w*((min(m, n)-1)//w+1)-min(m, n))*2+1 樓號小正下方在大樓號的行上的數:min(m, n)+(s-1)*w+(w*((min(m, n)-1)//w+1)-min(m, n))*2+1 樓號小的數豎直向走到樓號大的行數所需步數:s 到同一行后所需走的步數:abs(min(m, n)+(s-1)*w+(w*((min(m, n)-1)//w+1)-min(m, n))*2+1-max(m, n))偶數時:
min(m, n) + s * w 就得到了小樓號正下方與大樓號同一行的數,兩數相減取絕對值,就為在該行所需步數,在加上從上到下的步數s,就為結果。
總結
以上是生活随笔為你收集整理的第六届蓝桥杯--奇妙的数字和移动距离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯省赛2015年——奇妙的数字
- 下一篇: 谷歌ai人工智能叫什么_为Google产