信息学奥赛一本通 1177:奇数单增序列 | OpenJudge NOI 1.10 02:奇数单增序列
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1177:奇数单增序列 | OpenJudge NOI 1.10 02:奇数单增序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1177:奇數單增序列
OpenJudge NOI 1.10 02:奇數單增序列
【題目考點】
1. 排序
【君義精講】排序算法
【解題思路】
題目中說的是要先取出奇數,再對奇數排序。其實現排序再取出里面的奇數也可以,區別不大。
這里提供的做法為:輸入時判斷一個數是不是奇數,如果是將其加入輸入,如果不是則丟棄。
而后對這個數組排序。
數據個數為500,使用任何排序方法都可以過。
注意用逗號分隔輸出。
【題解代碼】
解法1:冒泡排序
#include<bits/stdc++.h> using namespace std; int main() {int n, a[505], x, an = 0;//an:a中元素個數cin >> n;for(int i = 1; i <= n; ++i){cin >> x;if(x % 2 == 1)a[++an] = x;}for(int i = 1; i <= an-1; ++i)for(int j = 1; j <= an-i; ++j)if(a[j] > a[j+1])swap(a[j], a[j+1]);cout << a[1];for(int i = 2; i <= an; ++i)cout << ',' << a[i];return 0; }解法2:插入排序
#include<bits/stdc++.h> using namespace std; int main() {int n, a[505], x, an = 0;//an:a中元素個數 cin >> n;for(int i = 1; i <= n; ++i){cin >> x;if(x % 2 == 1){a[++an] = x;for(int j = an; j > 1; --j){if(a[j] < a[j-1])swap(a[j], a[j-1]);elsebreak;}}}cout << a[1];for(int i = 2; i <= an; ++i)cout << ',' << a[i];return 0; }解法3:選擇排序
#include<bits/stdc++.h> using namespace std; int main() {int n, a[505], x, an = 0;//an:a中元素個數 cin >> n;for(int i = 1; i <= n; ++i){cin >> x;if(x % 2 == 1)a[++an] = x;}for(int i = 1; i <= an - 1; ++i){int mi = i;for(int j = i + 1; j <= an; ++j)if(a[j] < a[mi])mi = j; swap(a[mi], a[i]);}cout << a[1];for(int i = 2; i <= an; ++i)cout << ',' << a[i];return 0; }解法4:使用STL sort函數
#include<bits/stdc++.h> using namespace std; int main() {int n, a[505], x, an = 0;//an:a中元素個數 cin >> n;for(int i = 1; i <= n; ++i){cin >> x;if(x % 2 == 1)a[++an] = x;}sort(a+1, a+1+an);cout << a[1];for(int i = 2; i <= an; ++i)cout << ',' << a[i];return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1177:奇数单增序列 | OpenJudge NOI 1.10 02:奇数单增序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1172:求10000
- 下一篇: java动态同步_java并发基础-Sy