吳凡的題庫——快快程式設計1001-1100
阿新 • • 發佈:2022-04-18
- 排隊打飯
題目描述
下課了,n個同學排隊吃飯,隊伍中每人用一個整數表示其學號。餐廳只能同時容納m個同學就餐。就餐記錄是這樣的,進入餐廳就餐的同學,記錄其學 號,離開餐廳後,記錄其學號的負值。例如,5,表示5號同學進入食堂就餐,-5表示他離開餐廳。離開餐廳的順序是按照就餐先後順序的,如果1號在5 號之前進入餐廳,也一定會在5號之前離開餐廳。求記錄結束時餐廳還有多少人?如果餐廳已經坐滿人,還有 同學嘗試進入,這種情況是不允許的,一 定是記錄出現了錯誤,此時程式輸出Error。
輸入輸出格式 輸入格式 第一行兩個正整數,n和m,n表示排隊人數,m表示食堂最大容量,n <=10000,m<=500 第二行一個正整數k,表示記錄的數量,k<=20000 第三行k個整數,表示學生就餐和離開資訊,p表示p同學進入食堂,-p表示p同學離開食堂 輸出格式 一個整數,表示食堂中還有多少人在就餐
輸入輸出樣例
輸入樣例#1:
5 4
8
1 2 3 5 -1 8 -2 -3
輸出樣例#1:
2
說明:
學號為1,2,3,5的學生進入食堂就餐,1號離開,8號進入食堂,2號離開,3號離開。此時食堂中還有2人就餐,5號和8號。
輸入樣例#2:
5 3
7
1 2 3 4 5 -1 -2
輸出樣例#2:
Error
說明:
1,2,3號進入食堂就餐,食堂最大容量為3,當4號進入食堂就餐,超出食堂最大人數限制,輸出Error。
輸入樣例#3:
輸出樣例#3:
#include<iostream> using namespace std; int n,m,k,cnt=0,x; int main(){ cin>>n>>m; cin>>k; for(int i=0;i<k;i++){ cin>>x; if(x>0)cnt++; else cnt--; if(cnt>m)break; } if(cnt>m)cout<<"Error"; else cout<<cnt<<endl; return 0; }
- 隊伍長度(輸出時注意:行末不能出現空格)
題目描述
假期出行,高速公路十分擁堵。一條高速路口收費站只開放了兩個收費視窗,眾多車輛在這兩個視窗前的通道排起了長龍。車主都喜歡更短的隊伍,因 此每當有新到達車輛,他會選擇佇列長度短的視窗排隊,如果兩個佇列一樣長,選擇第一個視窗。現在有一段時間內該收費站的車輛通行記錄,車輛按 照到達次序依次編號1,2,3…記錄只包含三個單詞,arrive和leave1,leave2,arrive表示有車輛到達,leave1表示車輛通過視窗1後離開,leave2表示 車輛通過視窗2後離開。請問記錄結束時,兩支隊伍各有哪些車輛。
輸入輸出格式 輸入格式 第一行,一個正整數n,表示有多少條記錄,n<=10000。 第二行,n個字串,只有arrive,leave1,leave2三種記錄,表示車輛到達和離開收費站的情況,保證不會出現佇列為空後仍然有車輛leave的情況。 輸出格式 兩行,第一行表示記錄結束時視窗1前的排隊車輛序號,第二行表示記錄結束時視窗2前的排隊車輛序號,序號間由空格隔開。如果佇列為空,輸出一個 數字0。 注意:行末不能出現空格。
輸入輸出樣例
輸入樣例#1:
7
arrive arrive arrive arrive leave1 leave1 arrive
輸出樣例#1:
5
2 4
說明:
前4個arrive,分別是第1輛車排視窗1,第2輛車排視窗2,第3輛排視窗1,第4輛排視窗2。接下來視窗1有2輛車離開,1,3號車離開後隊 列為空。第5個arrive,5號車排在視窗1佇列。記錄結束視窗1前佇列中有1輛車,5號,視窗2前佇列有兩輛車,2號和4號。
輸入樣例#2:
5
arrive arrive leave1 leave2 arrive
輸出樣例#2:
3
0
說明:
前4條記錄過後,兩個窗前都沒有排隊車輛,最後一個arrive,3號車排在視窗1前。視窗1佇列中有1輛車,3號,視窗2佇列為空,輸出0。
輸入樣例#3:
輸出樣例#3:
#include<iostream>
#include<string>
using namespace std;
const int N=10000;
int n,b1,f1,b2,f2,q1[N],q2[N],id;
int main(){
cin>>n;
string s;
for(int i=0;i<n;i++){
cin>>s;
if(s=="arrive"){
if(b1-f1<=b2-f2)
q1[b1++]=id++;
else
q2[b2++]=id++;
}
else if(s=="leave1")
f1++;
else
f2++;
}
if(f1==b1)
cout<<0<<endl;
else{
for(int i=f1;i<=b1-2;i++)
cout<<q1[i]+1<<" ";
cout<<q1[b1-1]+1<<endl;
}
if(b2==f2)
cout<<0<<endl;
else{
for(int i=f2;i<=b2-2;i++)
cout<<q2[i]+1<<" ";
cout<<q2[b2-1]+1<<endl;
}
return 0;
}
- Candy Sharing 分糖果
題目描述
There are 41 candies to be distributed to 7 children. Each child must receive the same amount of candies. Please write a program to calculate the distribution results. Output the number of candy each child gets. The second line shows how many candies are left.
現在有41個糖果,要分給7個小朋友,每個小朋友拿到的糖果數量一定要相同。
請寫一個程式,計算出分配結果。
輸出第一行為每個小朋友拿到的糖果數量。
輸出第二行為剩下幾個糖果。
輸入輸出格式
輸入格式
無
輸出格式
輸出第一行為每個小朋友拿到的糖果數量。
輸出第二行為剩下幾個糖果。
輸入輸出樣例
輸入樣例#1:
無
輸出樣例#1:
無
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
cout<<41/7<<endl;
cout<<41%7<<endl;
return 0;
}
- 平均分
題目描述
程式設計班上有6位同學,他們的作業分數分別為:
100分
59分
1分
100分
99分
2分
請寫一個程式,求出他們的平均分,結果保留1位小數。
輸入輸出格式
輸入格式
無
輸出格式
輸出一個小數,保留1位小數
輸入輸出樣例
輸入樣例#1:
無
輸出樣例#1:
無
輸入樣例#2:
輸出樣例#2:
輸入樣例#3:
輸出樣例#3:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
cout<<fixed<<setprecision(1)<<(100 + 59 + 1 + 100 + 99 + 2) /6.0<<endl;
return 0;
}
- 取款
題目描述
你是一個銀行小職員,你的日常工作就是根據客戶要求,從銀行裡為他們提取特定數額的紙幣。已知客戶需要提取n元,你需要用最少的 紙幣數量湊出n紙幣數量湊出n元,請問最少要幾張?
注意你所在國家只有以下面值的紙幣:1元,2元,3元,9元。
輸入輸出格式
輸入格式
輸入檔案withdraw.in
輸入一個正整數n,n<=10000
輸出格式
輸出檔案withdraw.out
輸出一個正整數
輸入輸出樣例
輸入樣例#1:
8
輸出樣例#1:
3
輸入樣例#2:
30
輸出樣例#2:
4
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
const int N=4;
int money[N]={9,3,2,1};
int main(){
freopen("withdraw.in", "r", stdin);
freopen("withdraw.out", "w", stdout);
int n,ans=0;
cin>>n;
for(int i=0;i<N;i++){
ans+=n/money[i];
n%=money[i];
}
cout<<ans<<endl;
return 0;
}
- 防禦塔
題目描述
敵人有n架轟炸機依次向你飛來,第i架飛機高度為h[i]。你需要用防禦塔發出防空導彈炸燬敵機。
你的防禦塔有一個優點:第一枚導彈可以打中任意高度。
但是,你的防禦塔也有一個缺陷:之後每次導彈的高度要比上一枚導彈低。
為了擊中所有敵機,請問最少要安排幾個防禦塔?
輸入輸出格式
輸入格式
輸入檔案towerdefense.in
第一行為正整數n,n<=1000
第二行為n個正整數,代表飛機高度,均不超過10000
輸出格式
輸出檔案towerdefense.out
輸出一個正整數。
輸入輸出樣例
輸入樣例#1:
5
1 2 3 4 3
輸出樣例#1:
4
輸入樣例#2:
4
1 2 1 2
輸出樣例#2:
3
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("towerdefense.in", "r", stdin);
freopen("towerdefense.out", "w", stdout);
int cnt=0, d[1000], h[1000], n;
cin>>n;
for(int i=0;i<n;i++)cin>>h[i];
for(int i=0,j;i<n;i++){
for(j=0;j<cnt;j++)
if(h[i]<d[j])break;
d[j]=h[i];
if(j==cnt)cnt++;
}
cout<<cnt<<endl;
return 0;
}
- 混合飲料
題目描述
你有兩杯果汁:一杯蘋果汁有a毫升,一杯西柚汁有b毫升。現在你希望把兩杯飲料混合成自創的“蘋果西柚汁”,然後再對半分成兩杯一樣多的飲料。請 問最後每一杯有幾毫升?
輸入輸出格式
輸入格式
輸入包含兩個數字,用空格分開,輸入的數字都不會超過10000。
輸出格式
輸出一個浮點數(保留1位小數)。
輸入輸出樣例
輸入樣例#1:
5 10
輸出樣例#1:
7.5
輸入樣例#2:
10 12
輸出樣例#2:
11.0
輸入樣例#3:
輸出樣例#3:
#include<iostream>
#include<iomanip>
using namespace std;
int a,b;
int main(){
cin>>a>>b;
double c = a / 2.0 + b / 2.0;
cout<<fixed<<setprecision(1)<<c;
return 0;
}
- 預言家
題目描述
小明報出兩個數字a,b,讓你猜下一個數字是幾。
哦對了,小明告訴你他說的數字一定是等差數列,希望這個條件能幫到你。
輸入輸出格式
輸入格式
輸入包含兩個正整數,用空格隔開,都不超過100。
輸出格式
輸出一個整數。
輸入輸出樣例
輸入樣例#1:
1 3
輸出樣例#1:
5
輸入樣例#2:
10 20
輸出樣例#2:
30
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b;
c = b + b - a;
cout<<c;
return 0;
}
- 單鏈表(選擇題) //注意:以快快網站題目為準,釋出word舊版可能有錯
題目描述
1. 線性表的順序儲存結構是一種( )
A. 隨機存取的儲存結構
B. 順序存取的儲存結構
C. 索引存取的儲存結構
D. 雜湊存取的儲存結構
2. 一個順序表所佔用的儲存空間大小與( )無關。
A. 表的長度
B. 元素的型別
C. 元素的存放順序
D. 元素中各欄位的型別
3. 要將一個順序表{a0,a1,,…,an-1}中i號資料元素ai(0≤i≤n-1)刪除,需要移動( )個數據元素。
A. i
B. n-i-1
C. n-i
D. n-i+1
4.線性表採用鏈式儲存時,其地址( )。
A. 必須是連續的
B. 一定是不連續的
C. 部分地址必須是連續的
D. 連續與否均可以
5. 鏈式儲存結構的最大優點是( )。
A. 便於隨機存取
B. 儲存密度高
C. 便於進行插入和刪除操作
D. 無需預分配空間
6. 有以下結構體說明和變數定義,如圖所示,指標 p、q、r 分別指向一個連結串列中的三個連續結點。
struct node {
int data;
node *next;
} *p, *q, *r;
現要將 q 和 r 所指結點的先後位置交換,同時要保持連結串列的連續,以下程式段中錯誤 的是( )。
A. q->next = r->next; p->next = r; r->next = q;
B. p->next = r; q->next = r->next; r->next = q;
C. q->next = r->next; r->next = q; p->next = r;
D. r->next = q; q->next = r->next; p->next = r;
7. 在帶尾指標(連結串列指標clist指向尾結點)的非空迴圈單鏈表中每個結點都以next欄位的指標指向下一個節點。假定其中已經有2個以 上的結點。下 面哪些說法是正確的( )
A. 如果p指向一個待插入的新結點,在頭部插入一個元素的語句序列為:
p->next = clist->next; clist->next = p;
B. 如果p指向一個待插入的新結點,在尾部插入一個元素的語句序列為:
p->next = clist;clist->next = p;
C. 在頭部刪除一個結點的語句序列為:
clist->next = clist->next->next; p = clist->next; delete p;
D. 在尾部刪除一個結點的語句序列為。
p = clist; clist = clist ->next; delete p;
8. 在連結串列中若經常要刪除表中最後一個結點或在最後一個結點之後插入一個新結點,則宜採用( )儲存方式。
A. 順序表
B. 用頭指標標識的迴圈單鏈表
C. 用尾指標標識的迴圈單鏈表
D. 用頭指標標識的非迴圈單鏈表
9. 非空的迴圈單鏈表head的尾結點(由p所指向)滿足( )。
A. p->next == NULL
B. p == NULL
C. p->next == head
D. p == head
10. 某線性表最常用的操作是在最後一個結點之後插入一個結點或刪除第一個結點,故採用( )儲存方式最節省運算時間。
A. 單鏈表
B. 僅有頭結點的單迴圈連結串列
C. 雙鏈表
D. 僅有尾指標的單迴圈連結串列
11. 在一個長度為n(n>1)的單鏈表上,設有頭和尾兩個指標,執行( )操作與連結串列的長度有關。
A. 刪除單鏈表中的第一個元素
B. 刪除單鏈表中的最後一個元素
C. 在單鏈表第一個元素前插入一個新元素
D. 在單鏈表最後一個元素後插入一個新元素
12. 在單鏈表指標為p的結點之後插入指標為s的結點,正確的操作是:( )。
A. p->next=s; s->next=p->next;
B. s->next=p->next; p->next=s;
C. p->next=s; p->next=s->next;
D. p->next=s->next; p->next=s;
13. 對於單鏈表表示法,以下說法錯誤的是 ( )
A. 資料域用於儲存線性表的一個數據元素
B. 指標域或鏈域用於存放一個指向本結點所含資料元素的直接後繼所在結點的指標
C. 所有資料通過指標的連結而組織成單鏈表
D. NULL稱為空指標,它不指向任何結點,只起標誌作用
14. 在迴圈連結串列中,將頭指標改設為尾指標(rear)後,其頭結點和尾結點的儲存位置分別是( )
A. rear和rear->next->next
B. rear->next和rear
C. rear->next->next和rear
D. rear和rear->next
15. 迴圈連結串列主要優點是( )
A. 不再需要頭指標了
B. 已知某個結點的位置後,能夠容易找到它的直接前趨
C. 在進行插入、刪除運算時,能更好地保證連結串列不斷開
D. 從表中任一結點出發都能掃描到整個連結串列
16. 已知單鏈表中的元素以值遞增有序排列,下列演算法刪除單鏈表中所有值相同的元素,同時釋放被刪結點空間。請將該演算法補充完整。struct node{
int data;
node *next;
}LNode;
void delete_equal(LNode *h){
LNode *p=h, *q;
if (h==NULL) return;
while (p->next!=NULL) {
q=p->next;
if(p->data!=q->data)
p=q;
else //相鄰兩元素值相等,則迴圈刪除後繼等值結點
while (q!=NULL && q->data==p->data) {
__________________________
}
}
}
A. p->next=q->next; delete q;
B. q->next=p->next; delete q; q=p->next;
C. p->next=q->next; delete q; q= p->next;
D. p->next=q->next; delete q; q=p;
輸入輸出格式
輸入格式
無
輸出格式
無
輸入輸出樣例
輸入樣例#1:
無
輸出樣例#1:
無
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
#include<string>
using namespace std;
string ans[16]={"A","C","B", "D", "D", "D", "A", "C", "C", "D", "B", "B", "C", "B", "D", "C"};
int i;
int main() {
cin>>i;
cout<<ans[i-1]<<endl;
return 0;
}
- 及格線
題目描述
語文老師的數學不太好,學生是否考試及格的問題,他總是算不對。你作為程式設計高手,決定出手相救。如果學生得分達到60分,那麼就是及格的,應該 輸出Pass;否則輸出Fail。
輸入輸出格式
輸入格式
輸入一個非負整數,保證不超過100
輸出格式
輸出Pass或者Fail
輸入輸出樣例
輸入樣例#1:
60
輸出樣例#1:
Pass
輸入樣例#2:
59
輸出樣例#2:
Fail
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
if (n>=60)
cout<<"Pass"<<endl;
else //否則
cout<<"Fail"<<endl;
return 0;
}
- 判斷三的倍數
題目描述
輸入正整數n,請判斷n是不是3的倍數。輸出Yes或者No。 n<=1000
輸入輸出格式
輸入格式
如題
輸出格式
如題
輸入輸出樣例
輸入樣例#1:
6
輸出樣例#1:
Yes
輸入樣例#2:
7
輸出樣例#2:
No
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int main(){
int n,x;
cin>>n;
if (n<=1000){
x=n%3;
if (0==x)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
- 優惠促銷
題目描述
西佳佳商場進行暑期打折促銷,一支鋼筆單價10元。如果購買數量滿100支可以打七折;否則不打折。請寫一個程式,輸入是一個正整數 表示購買數量 ,輸出總費用。
輸入輸出格式
輸入格式
輸入一個非負整數,保證不超過100000
輸出格式
輸出一個整數
輸入輸出樣例
輸入樣例#1:
80
輸出樣例#1:
800
輸入樣例#2:
200
輸出樣例#2:
1400
解釋說明:
買200支筆可以打七折,每支筆單價變成7元,總費用=7元/支*200支=1400元
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
if (a>100)
cout<<a * 7;
else
cout<<a * 10;
return 0;
}
- 數數
題目描述
輸入一個正整數n,從小到大輸出1到n共n個數。
輸入輸出格式
輸入格式
輸入只有一行,包含一個正整數n,1<=n<=10000
輸出格式
輸出只有一行,包含若干個正整數,由空格隔開。
輸入輸出樣例
輸入樣例#1:
4
輸出樣例#1:
1 2 3 4
輸入樣例#2:
7
輸出樣例#2:
1 2 3 4 5 6 7
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int main(){
int n,i;
cin>>n;
for(i=1;i<=n;i++){
cout<<i<<" ";
}
return 0;
}
- 二的倍數
題目描述
輸入一個正整數n,從小到大輸出1到n裡所有2的倍數。
輸入輸出格式
輸入格式
輸入只有一行,包含一個正整數n,2<=n<=10000
輸出格式
輸出只有一行,包含若干個正整數,由空格隔開。
輸入輸出樣例
輸入樣例#1:
4
輸出樣例#1:
2 4
輸入樣例#2:
11
輸出樣例#2:
2 4 6 8 10
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
int n,i;
int main(){
i = 2;
cin>>n;
while(i<=n){
cout<<i;
cout<<" ";
i+=2;
}
return 0;
}
- 三的次方
題目描述
輸入正整數b,輸出3的b次方。
輸入輸出格式
輸入格式
輸入一個整數b,資料的範圍: 1<=b<=30
輸出格式
一個整數
輸入輸出樣例
輸入樣例#1:
2
輸出樣例#1:
9
輸入樣例#2:
4
輸出樣例#2:
81
輸入樣例#3:
30
輸出樣例#3:
205891132094649
#include<iostream>
using namespace std;
int main(){
long long b;
cin>>b;
long long ans=1,i=1;
while(i<=b){
ans*=3;
i++;
}
cout<<ans<<endl;
return 0;
}
- 圖論選擇題
題目描述
1. 已知n個頂點的有向圖,若該圖是強連通的(從所有頂點都存在路徑到達其他頂點),則該圖中最少有( )條有向邊?
A. n B. n+1 C. n-1 D. n*(n-1)
2. 無向完全圖是圖中每對頂點之間都恰有一條邊的簡單圖。已知無向完全圖G有7個頂點,則它共有( )條邊。
A. 7 B. 21 C. 42 D. 49
3. 在無向圖中,所有頂點的度數之和是邊數的( )倍。
A. 0.5 B. 1 C. 2 D. 4
4. 有向圖中每個頂點的度等於該頂點的( )
A. 入度 B. 出度 C. 入度與出度之和 D. 入度與出度之差
5. 6個頂點的連通圖的最小生成樹,其邊數為( )。
A. 6 B. 5 C. 7 D. 4
6. 設G是有6個結點的完全圖,要得到一棵生成樹,需要從G中刪去( )條邊。
A. 6 B. 9 C. 10 D. 15
7. G 是一個非連通簡單無向圖,共有 28 條邊,則該圖至少有( )個頂點。
A. 10 B. 9 C. 8 D. 7
8. 設簡單無向圖 G 有 16 條邊且每個頂點的度數都是 2,則圖 G 有( )個頂點。
A. 10 B. 12 C. 8 D. 16
9. 設 G 是有 n 個結點、m 條邊(n ≤ m)的連通圖,必須刪去 G 的( )條邊,才能使得 G 變成一棵樹。
A. m – n + 1 B. m – n C. m + n + 1 D. n – m + 1
10. 在一個無向圖中,如果任意兩點之間都存在路徑相連,則稱其為連通圖。右圖是一個有5個頂點、8條邊的連通圖。若要使它不再是連通圖,至少要 刪去其中的( )條邊。
A.2 B.3 C.4 D.5
11. 對一個有向圖而言,如果每個節點都存在到達其他任何節點的路徑,那麼就稱它是強連通的。例如,右圖就是一個強連通圖。事實上,在刪掉邊( )後,它依然是強連通的。
A. a B. b C. c D. d
12. 在一個無向圖中,如果任意兩點之間都存在路徑相連,則稱其為連通圖。下圖是一個有4 個頂點、6 條邊的連通圖。若要使它不再是連通圖,至少 要刪去其中的( )條邊。
A. 1 B. 2 C. 3 D. 4
13. 以 A0 作為起點,對下面的無向圖進行深度優先遍歷時,遍歷順序不可能是( )。
A. A0, A1, A2, A3 B. A0, A1, A3, A2
C. A0, A2, A1, A3 D. A0, A3, A1, A2
14. (多選)從頂點A0出發,對有向圖( )進行廣度優先搜尋(BFS)時,一種可能的遍歷順序是
A0,A1,A2,A3,A4。
15.(多選)以A0作為起點,對下面的無向圖進行深度優先遍歷時(遍歷的順序與頂點字母的下標無關),最後一個遍歷到的頂點可能是 ( )。
A.A1 B.A2 C.A3 D.A4
輸入輸出格式
輸入格式
無
輸出格式
無
輸入輸出樣例
輸入樣例#1:
無
輸出樣例#1:
無
輸入樣例#2:
輸出樣例#2:
輸入樣例#3:
輸出樣例#3:
#include<iostream>
#include<string>
using namespace std;
string ans[20]={"A","B","C","C","B","C","B","D","A","B","A","C","A","AD","CD"}; // (*)
int i;
int main() {
cin>>i;
cout<<ans[i-1]<<endl;
return 0;
}