1. 程式人生 > >12月第一週結(C++)

12月第一週結(C++)

程式設計題#1:分配病房

來源: POJ (Coursera宣告:在POJ上完成的習題將不會計入Coursera的最後成績。)

注意: 總時間限制: 1000ms 記憶體限制: 65536kB

描述

某個科室的病房分為重症和普通,只有當病人的疾病嚴重程度超過了入住重症病房的最低嚴重值,才可以安排入住重症病房。

現在要求設計一個程式,給病人安排好病房。疾病的嚴重程度用0到10來表示,0表示小毛病,10表示非常嚴重。

輸入

第一行輸入病人的個數m(m < 50),以及安排住入重症病房的最低嚴重值a

緊接著m行,每行表示病人編號(三個位,用0補齊)及其疾病的嚴重程度(浮點數,1位小數)。

每個病人的疾病嚴重程度都不一樣。

輸出

要求按照病人的嚴重程度輸出住在重症病房裡的病人的編號

注意:

如果當前所有病人的嚴重程度並不滿足住在重症病房裡,則輸出“None.”(不包括引號)

樣例輸入

10 7.55

006 6.5

005 8.0

004 3.5

009 8.5

011 7.0

043 9.5

003 5.0

103 6.0

112 4.0

118 9.0

樣例輸出

043 9.5

118 9.0

009 8.5

005 8.0

程式設計題#2: 配對鹼基鏈

來源: POJ (Coursera宣告:在POJ上完成的習題將不會計入Coursera的最後成績。)

注意: 總時間限制: 1000ms 記憶體限制: 65536kB

描述

脫氧核糖核酸(DNA)由兩條互補的鹼基鏈以雙螺旋的方式結合而成。而構成DNA的鹼基共有4種,分別為腺瞟呤(A)、鳥嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。我們知道,在兩條互補鹼基鏈的對應位置上,腺瞟呤總是和胸腺嘧啶配對,鳥嘌呤總是和胞嘧啶配對。你的任務就是根據一條單鏈上的鹼基序列,給出對應的互補鏈上的鹼基序列。

輸入

第一行是一個正整數n,表明共有n條要求解的鹼基鏈。

以下共有n行,每行用一個字串表示一條鹼基鏈。這個字串只含有大寫字母A、T、G、C,分別表示腺瞟呤、胸腺嘧啶、鳥嘌呤和胞嘧啶。每條鹼基鏈的長度都不超過255。

輸出

共有n行,每行為一個只含有大寫字母A、T、G、C的字串。分別為與輸入的各鹼基鏈互補的鹼基鏈。

樣例輸入

5

ATATGGATGGTGTTTGGCTCTG

TCTCCGGTTGATT

ATATCTTGCGCTCTTGATTCGCATATTCT

GCGTTTCGTTGCAA

TTAACGCACAACCTAGACTT

樣例輸出

TATACCTACCACAAACCGAGAC

AGAGGCCAACTAA

TATAGAACGCGAGAACTAAGCGTATAAGA

CGCAAAGCAACGTT

AATTGCGTGTTGGATCTGAA

程式設計題#3:尋找山頂

來源: POJ (Coursera宣告:在POJ上完成的習題將不會計入Coursera的最後成績。)

注意: 總時間限制: 1000ms 記憶體限制: 65536kB

描述

在一個m×n的山地上,已知每個地塊的平均高程,請求出所有山頂所在的地塊(所謂山頂,就是其地塊平均高程不比其上下左右相鄰的四個地塊每個地塊的平均高程小的地方)。

輸入

第一行是兩個整數,表示山地的長m(5≤m≤20)和寬n(5≤n≤20)。

其後m行為一個m×n的整數矩陣,表示每個地塊的平均高程。每行的整數間用一個空格分隔。

輸出

輸出所有上頂所在地塊的位置。每行一個。按先m值從小到大,再n值從小到大的順序輸出。

樣例輸入

10 5

0 76 81 34 66

1 13 58 4 40

5 24 17 6 65

13 13 76 3 20

8 36 12 60 37

42 53 87 10 65

42 25 47 41 33

71 69 94 24 12

92 11 71 3 82

91 90 20 95 44

樣例輸出

0 2

0 4

2 1

2 4

3 0

3 2

4 3

5 2

5 4

7 2

8 0

8 4

9 3

 

第一題:用了排序演算法,外加輸入輸出控制,固定輸出幾位,不足補零,小數點後面固定輸出幾位。

#include<iostream>
#include<iomanip>
using namespace std;
int main() {
	int m;
	double a;
	cin >> m >> a;
	int av[50] = { 0 };
	float b[50] = { 0 };
	int s = 0;
	for (int i = 0; i < m; ++i) {
		int j = 0;
		double k = 0;
		cin >> j >> k;
		if (k > a) {
			av[s] = j;
			b[s] = k;
			s++;
		}
	}
	if(s!=0){
	    for (int i = 0; i < s - 1; ++i) {
		    for (int j = 0; j < s - i - 1; ++j) {
			    if (b[j + 1] > b[j]) {
				    float temp;
				    temp = b[j];
				    b[j] = b[j + 1];
				    b[j + 1] = temp;
				    int tem;
				    tem = av[j];
				    av[j] = av[j + 1];
				    av[j + 1] = tem;
			    }
		    }
	    }
	    for (int i = 0; i < s; ++i) {
		    cout << setw(3) << setfill('0') << av[ i ] << " ";
		    cout << fixed << setprecision(1)<<b[i] << endl;
	    }

    }else 
        cout<< "None."<<endl;
    return 0;
}

第二題:使用字元陣列,注意一點:字元陣列可以直接用cin和cout輸入輸出,然後就是使用switch語句了

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int n ;
    cin >> n;
    for(int i = 0;i < n; ++i){
        char a[256] = {0};
        char b[256] = {0};
        cin >> a;
        for (int j = 0;j < strlen(a); ++j){
            switch(a[j]){
                case 'A':b[j] = 'T';break;
                case 'T':b[j] = 'A';break;
                case 'C':b[j] = 'G';break;
                case 'G':b[j] = 'C';break;
                default:break;
            }
        }
        cout << b << endl;
    }
    return 0;

}

第三題: 這是一道典型迴圈判斷題,題解如下:

#include<iostream>
using namespace std;
int main(){
    int m,n;
    cin >> m >> n;
    int a[20][20] = {0};
    for(int i = 0;i<m;++i){
        for(int j = 0; j < n;++j){
            cin >> a[i][j];
        }
    }                     // input array
    for(int i = 0; i < m; ++i){
        for(int j = 0; j < n; ++j){
            if( (a[i][j] >= a[i][j-1] &&j-1 >= 0 || j-1<0 ) &&(a[i][j] >= a[i-1][j] && i-1>=0 ||i-1<0) &&(a[i][j] >= a[i+1][j] && i+1 <m || i+1>=m) &&(a[i][j] >= a[i][j+1] && j+1< n || j+1 >=n))   
                cout << i << " " <<j <<endl;
        }
    }//    when you write this if statement ,you must take care of the priority of the operator   or just use the brackets to help you avoid the errors 
    return 0;
}