1. 程式人生 > >演算法筆記 3.2 codeup課後習題

演算法筆記 3.2 codeup課後習題

問題 A: 統計同成績學生人數

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

讀入N名學生的成績,將獲得某一給定分數的學生人數輸出。

輸入

測試輸入包含若干測試用例,每個測試用例的格式為 第1行:N 第2行:N名學生的成績,相鄰兩數字用一個空格間隔。 第3行:給定分數 當讀到N=0時輸入結束。其中N不超過1000,成績分數為(包含)0到100之間的一個整數。

輸出

對每個測試用例,將獲得給定分數的學生人數輸出。

樣例輸入

4
70 80 90 100
80
3
65 75 85
55
5
60 90 90 90 85
90
0

樣例輸出

1
0
3

程式碼:

#include <iostream>
using namespace std;
int a[1010];

int main()
{
   int n;
   cin>>n;
   int score;
   int k;
   while(n){
    k=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cin>>score;
    for(int i=0;i<n;i++){
        if(a[i]==score) k++;
    }
   cout<<k<<endl;
   cin>>n;

   }
    return 0;
}

問題 B: 找x

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

輸入一個數n,然後輸入n個數值各不相同,再輸入一個值x,輸出這個值在這個陣列中的下標(從0開始,若不在陣列中則輸出-1)。

輸入

測試資料有多組,輸入n(1<=n<=200),接著輸入n個數,然後輸入x。

輸出

對於每組輸入,請輸出結果。

樣例輸入

4
1 2 3 4
3

樣例輸出

2

程式碼:

#include <iostream>
using namespace std;
int main()
{
    int n;
    int x;
    int a[210];
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        cin>>x;
        int i;
        for(i=0;i<n;i++){
            if(x==a[i]){
                cout<<i<<endl;
                break;
            }
        }
        if(i==n)
            cout<<-1<<endl;
    }
    return 0;
}

問題 C: 查詢學生資訊

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

輸入N個學生的資訊,然後進行查詢。

輸入

輸入的第一行為N,即學生的個數(N<=1000)

接下來的N行包括N個學生的資訊,資訊格式如下:

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19

然後輸入一個M(M<=10000),接下來會有M行,代表M次查詢,每行輸入一個學號,格式如下:

02

03

01

04

輸出

輸出M行,每行包括一個對應於查詢的學生的資訊。

如果沒有對應的學生資訊,則輸出“No Answer!”

樣例輸入

5
001 張三 男 19
002 李四 男 20
003 王五 男 18
004 趙六 女 17
005 劉七 女 21
7
003
002
005
004
003
001
006

樣例輸出

003 王五 男 18
002 李四 男 20
005 劉七 女 21
004 趙六 女 17
003 王五 男 18
001 張三 男 19
No Answer!

程式碼:

#include <iostream>
using namespace std;

struct student{
    string num;
    string name;
    string sex;
    string age;
}stu[1010];
int N;

void FindPrint(string num){
    int i;
    for(i=0;i<N;i++){
        if(stu[i].num==num){
            cout<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].sex<<" "<<stu[i].age<<endl;
            break;
        }
    }
    if(i==N){
        cout<<"No Answer!"<<endl;
    }
}

int main()
{

    while(cin>>N){
        for(int i=0;i<N;i++){
            cin>>stu[i].num>>stu[i].name>>stu[i].sex>>stu[i].age;
        }
        int M;
        cin>>M;
        for(int i=0;i<M;i++){
            string num;
            cin>>num;
            FindPrint(num);
        }
    }
    return 0;
}

問題 D: 查詢

時間限制: 1 Sec  記憶體限制: 32 MB 提交: 814  解決: 374 [提交][狀態][討論版][命題人:外部匯入]

題目描述

輸入陣列長度 n  輸入陣列      a[1...n]  輸入查找個數m  輸入查詢數字b[1...m]  輸出 YES or NO  查詢有則YES 否則NO 。

輸入

輸入有多組資料。 每組輸入n,然後輸入n個整數,再輸入m,然後再輸入m個整數(1<=m<=n<=100)。

輸出

如果在n個數組中輸出YES否則輸出NO。

樣例輸入

6
3 2 5 4 7 8
2
3 6

樣例輸出

YES
NO

程式碼:

#include <iostream>

using namespace std;
int a[110];
int n;
bool Find(int b){
    for(int i=0;i<n;i++){
        if(a[i]==b)
            return true;
    }
    return false;

}

int main()
{
    int m;
    int b;
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        cin>>m;
        for(int i=0;i<m;i++){
            cin>>b;
            if(Find(b)){
                cout<<"YES"<<endl;
            }else{
                cout<<"NO"<<endl;
            }
        }
    }
    return 0;
}

問題 E: 學生查詢

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

輸入n個學生的資訊,每行包括學號、姓名、性別和年齡,每一個屬性使用空格分開。最後再輸入一學號,將該學號對應的學生資訊輸出。

輸入

測試資料有多組,第一行為樣例數m。對於每個樣例,第一行為學生人數n(n不超過20),加下來n行每行4個整數分別表示學號、姓名、性別和年齡,最後一行表示查詢的學號。

輸出

輸出m行,每行表示查詢的學生資訊,格式參見樣例。

樣例輸入

1
4
1 李江 男 21
2 劉唐 男 23
3 張軍 男 19
4 王娜 女 19
2

樣例輸出

2 劉唐 男 23

程式碼:

#include <iostream>
using namespace std;

struct student{
    string num;
    string name;
    string sex;
    string age;
}stu[30];
int N;

void FindPrint(string num){
    int i;
    for(i=0;i<N;i++){
        if(stu[i].num==num){
            cout<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].sex<<" "<<stu[i].age<<endl;
            break;
        }
    }
    if(i==N){
        cout<<"No Answer!"<<endl;
    }
}

int main()
{
    int T;
    while(cin>>T)
    while(T--){
        cin>>N;
        for(int i=0;i<N;i++){
            cin>>stu[i].num>>stu[i].name>>stu[i].sex>>stu[i].age;
        }
        string num;
        cin>>num;
        FindPrint(num);
    }
    return 0;
}