c/c++ 编程试题
c/c++ 編程試題
帶*號為選作題,給出代碼截屏和編譯運算結(jié)果截屏
1.編程:選取M個最大的數(shù) 編程實現(xiàn)從N個無序數(shù)中選取M個最大的數(shù)(0 < M < N )
思路:通過冒泡排序或者選擇排序?qū)個數(shù)進行遞減排序,然后輸入前M個數(shù)即可。這里我想到的是通過數(shù)組來存儲這N個數(shù)。
#include <iostream> #include <stdio.h>using namespace std;int main() {int i,j,t,N,M,a[1000];printf("請輸入N:");scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&a[i]);}for(i=0;i<N-1;i++){for(j=0;j<N-1-i;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}printf("請輸入M:");scanf("%d",&M);for(j=0;j<M;j++){printf("%d\n",a[j]);}return 0; }2.編程:斷開鏈條 給定一個包含N個整數(shù)的數(shù)組A,假設(shè)這個數(shù)組表示的是一條鏈條,其中 每個元素表示鏈條上的一環(huán)。現(xiàn)在我們想把這條鏈條斷成3小部分。我們需 要做的就是斷開不相連的兩個環(huán),比如,我們需要斷開環(huán)P、Q
(0<P<Q<N-1, Q-P > 1),得到三個小鏈條[0,P-1],[P+1,Q-1],[Q+1,N-1]。
上述操作的成本是A[P]+A[Q]。 例如:數(shù)組A為 A[0] = 5 A[1] = 2 A[2] = 4 A[3] = 6 A[4] =
3 A[5] = 7 我們可以選擇如下方式斷開鏈條
- (1,3):成本是 2+6 = 8
- (1,4):成本是 2+3 = 5
- (2,4):成本是 4+3 = 7 寫一個函數(shù)如int breakchain(參數(shù)列表自定義); 對任一個給定的鏈條,返回斷開鏈條的最低成本,比如上面的例子中, 需要返回最低成本5 假設(shè):
- N是整數(shù),范圍[5,100000] A的元素是范圍在[1,1000000000]的整數(shù)
3.編程:順時針環(huán)繞列印矩陣元素 給定一個整數(shù)元素組成的矩陣,寫一個函數(shù),返回一個數(shù)組,數(shù)組中的元 素是按照順時針遍歷矩陣中的元素而組成。例如如下的3x4矩陣: 2, 3, 4, 8 5, 7, 9, 12 1, 0, 6, 10
得到的數(shù)組的元素按照順序是“2, 3, 4, 8, 12, 10, 6, 0, 1, 5, 7, 9”.
我讀完該題的時候腦子里面想到了《算法競賽 入門經(jīng)典 第2版》里面P40頁的蛇形填數(shù)問題。
即:在n * n方陣?yán)锾钊?,2,…,n*n,要求填成蛇形。例如,n=4時方陣為:
當(dāng)然這道題可以參考蛇形填數(shù)來進行改編
4.編程:最大方形長度 給定一個元素是布爾型大小為NM的矩陣A。大小為L的方形可以放置在A 中的(X,Y)處,如果滿足: 0 < L <= min(N,M) - 1 0 <= X <= N-L 0 <= Y <= M-L A[X+i][Y+j] = true, 0 <= i
< L, 0 <= j < L 如果L能被放置在(X,Y)以及(X+1,Y)或者(X,Y+1),我們說它可以被
從(X,Y)移動到(X+1,Y)或者(X,Y+1)。 我們想找出滿足以下條件的最大的L: L可以被放置在(0,0)(假如此處為true)
它可以被經(jīng)過一系列的移動,從(0,0)到達(N-L,M-L)
換言之,我們想找到最大的方形,可以從為true的左上移動到為true的右下,該方形覆蓋的區(qū)域都是true,移動方式是向下或者向右移動。一個極端情況是如果矩陣A中的元素全部是true,那
么L = min(N,M) - 1。 寫一個函數(shù):比如int moveSquare(參數(shù)列表自定義); 返回值為L。 比如:
A[0][0]=true A[0][1]=true A[0][2]=true A[0][3]=false A[1][0]=true
A[1][1]=true A[1][2]=true A[1][3]=false A[2][0]=true A[2][1]=true
A[2][2]=true A[2][3]=false A[3][0]=true A[3][1]=true A[3][2]=true
A[3][3]=true A[4][0]=false A[4][1]=true A[4][2]=true A[4][3]=true
A[5][0]=true A[5][1]=false A[5][2]=true A[5][3]=true 返回 2
A[0][0]=true A[0][1]=true A[0][2]=false A[0][3]=false A[1][0]=true
A[1][1]=false A[1][2]=false A[1][3]=false A[2][0]=false
A[2][1]=true A[2][2]=false A[2][3]=true 返回 0 A[1][1]=true 返回 1
假設(shè)N和M是范圍為[1,200]的整數(shù)
5.*問答題(建議編程實現(xiàn))
假設(shè)你站在120層摩天大樓的天臺,手握兩個iphone
x,并且可輕易到達任一樓層的陽臺。請用最少的嘗試次數(shù)nTry,確定能夠讓iphone自由下落而不會摔壞的最高層數(shù)nMaxLayer。比如20層摔不壞,21層摔壞,則nMaxLayer=21。在嘗試中你可以摔壞這兩個iphone,只要能得到答案。請說明最壞情況需要多少次嘗試以及你的思路。
總結(jié)
以上是生活随笔為你收集整理的c/c++ 编程试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于云平台的家居综合监测管理系统的设计与
- 下一篇: 驻马店治不孕不育最好的医院推荐