內容
RT,基本排序題
由於大家都用慣了內建sort,或許有些人早已忘記(或不曾知道)如何自己寫sort,因此本題要求自己寫sorting algorithm而不得使用任何內建相關的函數。
以下為禁止使用的標頭檔(不得include):
- 不得使用任何子目錄底下的標頭檔,例如"bits/stdc++.h"是位於子目錄"bits"底下的"stdc++.h",因此不得使用
- 不得使用任何包含標頭檔"algorithm"的標頭檔,包含"algorithm"本身
以下為禁止使用的資料結構與函數(不得於程式碼中出現該文字,因此其衍伸資料結構也不得使用,也請避免使用以下關鍵字作為自訂函數/變數名稱):
- list
- set
- map
- qsort
- priority_queue
此外,本題僅能以c++語言作答
輸入說明
第一行有一個正整數n代表數列長度
第二行有n個以空白隔開的正整數ai,分別為數列的每一項
1≤n≤10000 , 1≤ai≤10⁹
輸出說明
輸出一行n個以空白隔開的正整數,為排序後的序列
本題為嚴格比對,因此不得有任何多餘的空行與行尾空白
(絕對不是因為我懶得寫寬鬆匹配的程式X
範例輸入
5
7 3 9 15 4
範例輸出
3 4 7 9 15
程式碼
#include <iostream>
using namespace std;
int main() {
int n;
while(cin>>n){
int arr[n];
for(int l = 0; l < n; l++){
cin>>arr[l];
}
//bubble sort
for(int i = n; i > 0; i--){
for(int j = 0; j < i-1; j++){
if(arr[j] > arr[j+1]){
swap(arr[j], arr[j+1]);
}
}
}
//輸出排好的數字
for(int k = 0; k < n; k++){
cout<<arr[k];
if(k == n-1){
break;
}
else{
cout<<" ";
}
}
cout<<endl; //換行
}
}
解說
這題有多筆測資,所以用while(cin>>n),他題目沒寫害我錯了好多次QmQ
那n個正整數要放進陣列裡,因為不能用sort,所以就只能自己寫bubble sort(氣泡排序法),就是中間那個雙層迴圈。
題目說不得有任何多餘的空行與行尾空白,所以要用個判斷式,在最後一個數字輸出後就不能再輸出空格了。
那為甚麼是n-1呢?
有學過陣列的應該就會知道,陣列是第一個位置是0,但平常人所說的位置一定是從1開始,所以就要減1,沒減的話......絕對不會有AC就對了!
最後要寫上換行的程式。
1 Comments
作者已經移除這則留言。
回覆刪除張貼留言