Bailian2871 Bailian3682 整數奇偶排序
問題簡述:(略)
問題分析:
Bailian2871 Bailian3682 整數奇偶排序。這個題用C++來實作代碼會比較簡單一些,使用算法函數sort()來實作。
一種做法是先進行簡單排序,然後按從大到小輸出奇數,再按從小到大輸出偶數。第二種做法是在進行排序是指定比較函數cmp(),規定元素的順序關系,考慮兩個數的到奇偶性,需要考慮四種組合。第三種做法是改造排序算法,把元素比較封裝到函數cmp()中。
程式說明:(略)
參考連結:(略)
題記:(略)
AC的C語言程式如下:
/* Bailian2871 Bailian3682 整數奇偶排序 */
#include <stdio.h>
#define N 10
int a[N];
int cmp(int a, int b)
{
if(a & 1 && (b & 1) == 0)
return 0;
else if((a & 1) == 0 && b & 1)
return 1;
else if(a & 1 && b & 1)
return a < b;
else if((a & 1) == 0 && (b & 1) == 0)
return a > b;
else
return 1;
}
int main(void)
{
int i, j, tmp;
while(~scanf("%d", &a[0])) {
for(i = 1; i < N; i++)
scanf("%d", &a[i]);
// 冒泡排序
for(i = 0; i < N - 1; i++)
for(j = N - 1; j >= i + 1; j--)
if(cmp(a[i], a[j])) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
for(i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
AC的C++語言程式(元素比較函數)如下:
/* Bailian2871 Bailian3682 整數奇偶排序 */
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
int a[N];
bool cmp(int a, int b)
{
if(a & 1 && (b & 1) == 0)
return true;
else if((a & 1) == 0 && b & 1)
return false;
else if(a & 1 && b & 1)
return a > b;
else if((a & 1) == 0 && (b & 1) == 0)
return a < b;
else
return false;
}
int main()
{
while(~scanf("%d", &a[0])) {
for(int i = 1; i < N; i++)
scanf("%d", &a[i]);
sort(a, a + N, cmp);
for(int i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
AC的C++語言程式(簡單排序)如下:
/* Bailian2871 Bailian3682 整數奇偶排序 */
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
int a[N];
int main()
{
while(~scanf("%d", &a[0])) {
for(int i = 1; i < N; i++)
scanf("%d", &a[i]);
sort(a, a + N);
for(int i = N - 1; i >= 0; i--)
if(a[i] & 1) printf("%d ", a[i]);
for(int i = 0; i < N; i++)
if((a[i] & 1) == 0) printf("%d ", a[i]);
printf("\n");
}
return 0;
}