算法基本練習

1、數列排序

問題描述

給定一個長度爲n的數列,將這個數列按從小到大的順序排列。1<=n<=200

輸入格式

第一行爲一個整數n。
第二行包含n個整數,爲待排序的數,每個整數的絕對值小於10000。

輸出格式

輸出一行,按從小到大的順序輸出排序後的數列。


   **2、特殊迴文數** 問題描述

123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n,編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。

輸入格式

輸入一行,包含一個正整數n。

輸出格式

按從小到大的順序輸出滿足條件的整數,每個整數佔一行。


3、迴文數
問題描述

1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。

輸出格式

按從小到大的順序輸出滿足條件的四位十進制數。


4、特殊的數字
問題描述

153是一個非常特殊的數,它等於它的每位數字的立方和,即153=111+555+333。編程求所有滿足這種條件的三位十進制數。

輸出格式

按從小到大的順序輸出滿足條件的三位十進制數,每個數佔一行。


5、楊輝三角形
問題描述

楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的係數。
它的一個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:
1
11
121
1331
給出n,輸出它的前n行。

輸入格式

輸入包含一個數n。

輸出格式

輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多餘的空格。


6、查找整數
問題描述

給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。

輸入格式

第一行包含一個整數n。 第二行包含n個非負整數,爲給定的數列,數列中的每個數都不大於10000。 第三行包含一個整數a,爲待查找的數。

輸出格式

如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。


7、數列特徵
問題描述

給出n個數,找出這n個數的最大值,最小值,和。

輸入格式

第一行爲整數n,表示數的個數。
第二行有n個數,爲給定的n個數,每個數的絕對值都小於10000。

輸出格式

輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。


8、字母圖形
問題描述

利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。

輸入格式

輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。

輸出格式

輸出n行,每個m個字符,爲你的圖形。


9、01字串

問題描述
對於長度爲5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:
00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。

輸入格式

本試題沒有輸入。

輸出格式

輸出32行,按從小到大的順序每行一個長度爲5的01串。


10、閏年判斷
問題描述

給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:

  1. 年份是4的倍數而不是100的倍數;
  2. 年份是400的倍數。
    其他的年份都不是閏年。

輸入格式

輸入包含一個整數y,表示當前的年份。

輸出格式

輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。
說明:當試題指定你輸出一個字符串作爲結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。


11、階乘計算
問題描述

輸入一個正整數n,輸出n!的值。
  其中n!=123*…*n。

算法描述

n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數a,A[0]表示a的個位,A[1]表示a的十位,依次類推。
  將a乘以一個整數k變爲將數組A的每一個元素都乘以k,請注意處理相應的進位。
  首先將a設爲1,然後乘2,乘3,當乘到n時,即得到了n!的值。

輸入格式

輸入包含一個正整數n,n<=1000。

輸出格式

輸出n!的準確值。


12、高精度加法
問題描述

輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。

算法描述

由於a和b都比較大,所以不能直接使用語言中的標準數據類型來存儲。對於這種問題,一般使用數組來處理。
定義一個數組A,A[0]用於存儲a的個位,A[1]用於存儲a的十位,依此類推。同樣可以用一個數組B來存儲b。
計算c = a + b的時候,首先將A[0]與B[0]相加,如果有進位產生,則把進位(即和的十位數)存入r,把和的個位數存入>C[0],即C[0]等於(A[0]+B[0])%10。
然後計算A[1]與B[1]相加,這時還應將低位進上來的值r也加起來,即C[1]應該是A[1]、B[1]和r三個數的和.如果又有進位產生,則仍可將新的進位存入到r中,和的個位存到C[1]中。依此類推,即可求出C的所有位。
最後將C輸出即可。

輸入格式

輸入包括兩行,第一行爲一個非負整數a,第二行爲一個非負整數b。兩個整數都不超過100位,兩數的最高位都不是0。

輸出格式

輸出一行,表示a + b的值。


13、Huffuman樹
問題描述

Huffman樹在編碼中有着廣泛的應用。在這裏,我們只關心Huffman樹的構造過程。
給出一列數{pi}={p0, p1, …, pn-1},用這列數構造Huffman樹的過程如下:

  1. 找到{pi}中最小的兩個數,設爲pa和pb,將pa和pb從{pi}中刪除掉,然後將它們的和加入到{pi}中。這個過程的費用記爲pa +pb。
  2. 重複步驟1,直到{pi}中只剩下一個數。
    在上面的操作過程中,把所有的費用相加,就得到了構造Huffman樹的總費用。
    本題任務:對於給定的一個數列,現在請你求出用該數列構造Huffman樹的總費用。

例如,對於數列{pi}={5, 3, 8, 2, 9},Huffman樹的構造過程如下:
  1. 找到{5, 3, 8, 2, 9}中最小的兩個數,分別是2和3,從{pi}中刪除它們並將和5加入,得到{5, 8, 9, 5},費用爲5。
  2. 找到{5, 8, 9, 5}中最小的兩個數,分別是5和5,從{pi}中刪除它們並將和10加入,得到{8, 9, 10},費用爲10。
  3. 找到{8, 9, 10}中最小的兩個數,分別是8和9,從{pi}中刪除它們並將和17加入,得到{10, 17},費用爲17。
  4. 找到{10, 17}中最小的兩個數,分別是10和17,從{pi}中刪除它們並將和27加入,得到{27},費用爲27。
  5. 現在,數列中只剩下一個數27,構造過程結束,總費用爲5+10+17+27=59。

輸入格式

輸入的第一行包含一個正整數n(n<=100)。
接下來是n個正整數,表示p0, p1, …, pn-1,每個數不超過1000。

輸出格式

輸出用這些數構造Huffman樹的總費用。


14、2n皇后問題
問題描述

給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。

輸入格式

輸入的第一行爲一個整數n,表示棋盤的大小。
接下來n行,每行n個0或1的整數,如果一個整數爲1,表示對應的位置可以放皇后,如果一個整數爲0,表示對應的位置不可以放皇后。

輸出格式

輸出一個整數,表示總共有多少种放法。


15、報時助手
問題描述

給定當前的時間,請用英文的讀法將它讀出來。
時間用時h和分m表示,在英文的讀法中,讀一個時間的方法是:
如果m爲0,則將時讀出來,然後加上“o’clock”,如3:00讀作“three o’clock”。
如果m不爲0,則將時讀出來,然後將分讀出來,如5:30讀作“five thirty”。
時和分的讀法使用的是英文數字的讀法,其中0~20讀作:
0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
30讀作thirty,40讀作forty,50讀作fifty。
對於大於20小於60的數字,首先讀整十的數,然後再加上個位數。如31首先讀30再加1的讀法,讀作“thirty one”。
按上面的規則21:54讀作“twenty one fifty four”,9:07讀作“nine seven”,0:15讀作“zero fifteen”。

輸入格式

輸入包含兩個非負整數h和m,表示時間的時和分。非零的數字前沒有前導0。h小於24,m小於60。

輸出格式

輸出時間時刻的英文。


16、回形取數
問題描述

回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。

輸入格式

輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。

輸出格式

輸出只有一行,共mn個數,爲輸入矩陣回形取數得到的結果。數之間用一個空格分隔,行末不要有多餘的空格。


17、龜兔賽跑預測
問題描述

話說這個世界上有各種各樣的兔子和烏龜,但是研究發現,所有的兔子和烏龜都有一個共同的特點——喜歡賽跑。於是世界上各個角落都不斷在發生着烏龜和兔子的比賽,小華對此很感興趣,於是決定研究不同兔子和烏龜的賽跑。他發現,兔子雖然跑比烏龜快,但它們有衆所周知的毛病——驕傲且懶惰,於是在與烏龜的比賽中,一旦任一秒結束後兔子發現自己領先t米或以上,它們就會停下來休息s秒。對於不同的兔子,t,s的數值是不同的,但是所有的烏龜卻是一致——它們不到終點決不停止。
  然而有些比賽相當漫長,全程觀看會耗費大量時間,而小華髮現只要在每場比賽開始後記錄下兔子和烏龜的數據——兔子的速度v1(表示每秒兔子能跑v1米),烏龜的速度v2,以及兔子對應的t,s值,以及賽道的長度l——就能預測出比賽的結果。但是小華很懶,不想通過手工計算推測出比賽的結果,於是他找到了你——清華大學計算機系的高才生——請求幫助,請你寫一個程序,對於輸入的一場比賽的數據v1,v2,t,s,l,預測該場比賽的結果。

輸入格式

輸入只有一行,包含用空格隔開的五個正整數v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且爲v1,v2的公倍數)

輸出格式

輸出包含兩行,第一行輸出比賽結果——一個大寫字母“T”或“R”或“D”,分別表示烏龜獲勝,兔子獲勝,或者兩者同時到達終點。
  第二行輸出一個正整數,表示獲勝者(或者雙方同時)到達終點所耗費的時間(秒數)。


18、芯片測試
問題描述

有n(2≤n≤20)塊芯片,有好有壞,已知好芯片比壞芯片多。
每個芯片都能用來測試其他芯片。用好芯片測試其他芯片時,能正確給出被測試芯片是好還是壞。而用壞芯片測試其他芯片時,會隨機給出好或是壞的測試結果(即此結果與被測試芯片實際的好壞無關)。
給出所有芯片的測試結果,問哪些芯片是好芯片。

輸入格式

輸入數據第一行爲一個整數n,表示芯片個數。
第二行到第n+1行爲n*n的一張表,每行n個數據。表中的每個數據爲0或1,在這n行中的第i行第j列(1≤i, j≤n)的數據表示用第i塊芯片測試第j塊芯片時得到的測試結果,1表示好,0表示壞,i=j時一律爲1(並不表示該芯片對本身的測試結果。芯片不能對本身進行測試)。

輸出格式

按從小到大的順序輸出所有好芯片的編號


19、FJ的字符串
問題描述

FJ在沙盤上寫了這樣一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的規律並寫所有的數列AN嗎?

輸入格式

僅有一個數:N ≤ 26。

輸出格式

請輸出相應的字符串AN,以一個換行符結束。輸出中不得含有多餘的空格或換行、回車符。


20、Sine之舞
問題描述

最近FJ爲他的奶牛們開設了數學分析課,FJ知道若要學好這門課,必須有一個好的三角函數基本功。所以他準備和奶牛們做一個“Sine之舞”的遊戲,寓教於樂,提高奶牛們的計算能力。
  不妨設
  An=sin(1–sin(2+sin(3–sin(4+…sin(n))…)
  Sn=(…(A1+n)A2+n-1)A3+…+2)An+1
  FJ想讓奶牛們計算Sn的值,請你幫助FJ打印出Sn的完整表達式,以方便奶牛們做題。

輸入格式

僅有一個數:N<201。

輸出格式

請輸出相應的表達式Sn,以一個換行符結束。輸出中不得含有多餘的空格或換行、回車符。


21、數的讀法
問題描述

Tom教授正在給研究生講授一門關於基因的課程,有一件事情讓他頗爲頭疼:一條染色體上有成千上萬個鹼基對,它們從0開始編號,到幾百萬,幾千萬,甚至上億。
  比如說,在對學生講解第1234567009號位置上的鹼基時,光看着數字是很難準確的念出來的。
  所以,他迫切地需要一個系統,然後當他輸入12 3456 7009時,會給出相應的念法:
  十二億三千四百五十六萬七千零九
  用漢語拼音表示爲
  shi er yi san qian si bai wu shi liu wan qi qian ling jiu
  這樣他只需要照着念就可以了。
  你的任務是幫他設計這樣一個系統:給定一個阿拉伯數字串,你幫他按照中文讀寫的規範轉爲漢語拼音字串,相鄰的兩個音節用一個空格符格開。
  注意必須嚴格按照規範,比如說“10010”讀作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”讀作“shi wan”而不是“yi shi wan”,“2000”讀作“er qian”而不是“liang qian”。

輸入格式

有一個數字串,數值大小不超過2,000,000,000。

輸出格式

是一個由小寫英文字母,逗號和空格組成的字符串,表示該數的英文讀法。


22、完美的代價
問題描述

迴文串,是一種特殊的字符串,它從左往右讀和從右往左讀是一樣的。小龍龍認爲迴文串纔是完美的。現在給你一個串,它不一定是迴文的,請你計算最少的交換次數使得該串變成一個完美的迴文串。
  交換的定義是:交換兩個相鄰的字符
  例如mamad
  第一次交換 ad : mamda
  第二次交換 md : madma
  第三次交換 ma : madam (迴文!完美!)

輸入格式

第一行是一個整數N,表示接下來的字符串的長度(N <= 8000)
第二行是一個字符串,長度爲N.只包含小寫字母

輸出格式

如果可能,輸出最少的交換次數。
否則輸出Impossible


23、矩形面積交
問題描述

平面上有兩個矩形,它們的邊平行於直角座標系的X軸或Y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你編程算出兩個矩形的交的面積。

輸入格式

輸入僅包含兩行,每行描述一個矩形。
在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10^7的實數表示。

輸出格式

輸出僅包含一個實數,爲交的面積,保留到小數後兩位。


24、矩陣乘法
問題描述

給定一個N階矩陣A,輸出A的M次冪(M是非負整數)
  例如:
  A =
  1 2
  3 4
  A的2次冪
  7 10
  15 22

輸入格式

第一行是一個正整數N、M(1<=N<=30, 0<=M<=5),表示矩陣A的階數和要求的冪數
接下來N行,每行N個絕對值不超過10的非負整數,描述矩陣A的值

輸出格式

輸出共N行,每行N個整數,表示A的M次冪所對應的矩陣。相鄰的數之間用一個空格隔開


25、分解質因數
問題描述

求出區間[a,b]中所有整數的質因數分解。

輸入格式

輸入兩個整數a,b。

輸出格式

每行輸出一個數的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是從小到大的)(具體可看樣例)


26、字符串對比
問題描述

給定兩個僅由大寫字母或小寫字母組成的字符串(長度介於1到10之間),它們之間的關係是以下4中情況之一:
  1:兩個字符串長度不等。比如 Beijing 和 Hebei
  2:兩個字符串不僅長度相等,而且相應位置上的字符完全一致(區分大小寫),比如 Beijing 和 Beijing
  3:兩個字符串長度相等,相應位置上的字符僅在不區分大小寫的前提下才能達到完全一致(也就是說,它並不滿足情況2)。比如 beijing 和 BEIjing
  4:兩個字符串長度相等,但是即使是不區分大小寫也不能使這兩個字符串一致。比如 Beijing 和 Nanjing
  編程判斷輸入的兩個字符串之間的關係屬於這四類中的哪一類,給出所屬的類的編號。

輸入格式

包括兩行,每行都是一個字符串

輸出格式

僅有一個數字,表明這兩個字符串的關係編號


27、時間轉換
問題描述

給定一個以秒爲單位的時間t,要求用“::”的格式來表示這個時間。表示時間,表示分鐘,而表示秒,它們都是整數且沒有前導的“0”。例如,若t=0,則應輸出是“0:0:0”;若t=3661,則輸出“1:1:1”。

輸入格式

輸入只有一行,是一個整數t(0<=t<=86399)。

輸出格式

輸出只有一行,是以“::”的格式所表示的時間,不包括引號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章