演算法筆記 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;
}