日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序

發(fā)布時(shí)間:2025/3/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目鏈接】

ybt 1181:整數(shù)奇偶排序
OpenJudge NOI 1.10 06:整數(shù)奇偶排序

【題目考點(diǎn)】

1. 排序

【君義精講】排序算法

【解題思路】

解法1:將奇數(shù)和偶數(shù)分開,分別排序

將奇數(shù)和偶數(shù)分別存在兩個(gè)不同的數(shù)組中,奇數(shù)降序排序,偶數(shù)升序排序,分別排序輸出。

解法2:整合為一個(gè)比較條件

設(shè)函數(shù)判斷兩個(gè)數(shù)字哪個(gè)應(yīng)該排在前面

  • 如果一個(gè)是奇數(shù)一個(gè)是偶數(shù),奇數(shù)排在前面
  • 如果都是奇數(shù),更大的排在前面
  • 如果都是偶數(shù),更小的排在前面

這樣就得到了一個(gè)比較條件。用這個(gè)比較條件去做排序即可。
數(shù)據(jù)只有10個(gè),用什么排序方法都可以。

【題解代碼】

解法1:將奇數(shù)和偶數(shù)分開,分別排序

  • 使用STL sort函數(shù)排序
#include <bits/stdc++.h> using namespace std; bool cmpUp(int a, int b)//升序 {return a < b; } bool cmpDown(int a, int b)//降序 {return a > b; } int main() {int a, odd[15], even[15], oi = 0, ei = 0;//oi:odd中元素個(gè)數(shù) ei:even中元素個(gè)數(shù) for(int i = 1; i <= 10; ++i){cin >> a;if(a%2 == 0)even[++ei] = a;//填充數(shù)組 elseodd[++oi] = a;}sort(odd+1, odd+1+oi, cmpDown);//奇數(shù)降序排序 sort(even+1, even+1+ei, cmpUp);//偶數(shù)升序排序for(int i = 1; i <= oi; ++i)cout << odd[i] << ' ';for(int i = 1; i <= ei; ++i)cout << even[i] << ' '; return 0; }
  • 插入排序
#include <bits/stdc++.h> using namespace std; bool cmpUp(int a, int b)//升序 {return a < b; } bool cmpDown(int a, int b)//降序 {return a > b; } int main() {int a, odd[15], even[15], oi = 0, ei = 0;//oi:odd中元素個(gè)數(shù) ei:even中元素個(gè)數(shù) for(int i = 1; i <= 10; ++i){cin >> a;if(a%2 == 0){even[++ei] = a;//填充數(shù)組for(int j = ei; j > 1; --j){if(even[j] < even[j-1])//偶數(shù)升序排序 swap(even[j], even[j-1]);elsebreak; } }else{odd[++oi] = a;for(int j = oi; j > 1; --j){if(odd[j] > odd[j-1])//奇數(shù)降序排序 swap(odd[j], odd[j-1]);elsebreak; } }}for(int i = 1; i <= oi; ++i)cout << odd[i] << ' ';for(int i = 1; i <= ei; ++i)cout << even[i] << ' '; return 0; }

解法2:整合為一個(gè)比較條件

  • 使用STL sort函數(shù)
#include <bits/stdc++.h> using namespace std; bool cmp(int a, int b)//返回a排在前面的條件 {if(a%2 == 1 && b%2 == 1)//如果都是奇數(shù),更大的排在前面return a > b;else if(a%2 == 0 && b%2 == 0)//如果都是偶數(shù),更小的排在前面 return a < b;else//如果一個(gè)是奇數(shù)一個(gè)是偶數(shù),奇數(shù)排在前面return a%2 == 1;//如果a為奇數(shù) a在前面。如果a不是奇數(shù),那么b為奇數(shù),a不能排在前面。 } int main() {int a[15];for(int i = 1; i <= 10; ++i)cin >> a[i];sort(a+1, a+1+10, cmp);for(int i = 1; i <= 10; ++i)cout << a[i] << ' '; return 0; }
  • 使用選擇排序
#include <bits/stdc++.h> using namespace std; bool cmp(int a, int b)//返回a排在前面的條件 {if(a%2 == 1 && b%2 == 1)//如果都是奇數(shù),更大的排在前面return a > b;else if(a%2 == 0 && b%2 == 0)//如果都是偶數(shù),更小的排在前面 return a < b;else//如果一個(gè)是奇數(shù)一個(gè)是偶數(shù),奇數(shù)排在前面return a%2 == 1;//如果a為奇數(shù) a在前面。如果a不是奇數(shù),那么b為奇數(shù),a不能排在前面。 } int main() {int a[15];for(int i = 1; i <= 10; ++i)cin >> a[i];for(int i = 1; i <= 9; ++i)for(int j = i+1; j <= 10; ++j)if(cmp(a[j], a[i]))//如果a[j]應(yīng)該在a[i]前面 swap(a[j], a[i]);for(int i = 1; i <= 10; ++i)cout << a[i] << ' '; return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。