原文
https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2296
感謝Ruby兔的中文翻譯
http://rubyacm.blogspot.com/2011/07/11321-sort-sort-and-sort.html
程式碼裡使用的swap若不懂可以參考以下網站
C++
#include <iostream>
using namespace std;
void swap(int *a,int *b)//交換的涵式
{
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int n,m,i,j;
while(cin>>n>>m)
{
if(n==0&&m==0)//最後結尾輸出兩個零
{
cout<<"0 0"<<endl;
break;
}
else
{
cout<<n<<" "<<m<<endl;//輸出
}
int num[n]={0};//我用一維陣列
for(i =0;i<n;i++)//輸入
{
cin>>num[i];
}
for(i=0;i<n;i++)//開始交換囉
{ //採用兩兩比較的方法
for(j=0;j<n-i-1;j++)
{
if(num[j]%m>num[j+1]%m)//若此餘數比下一個餘數大就交換
{
swap(&num[j],&num[j+1]);
}
else if(num[j]%m==num[j+1]%m)//若餘數一樣大就比較原本的數字
{
if(num[j+1]%2!=0&&num[j]%2==0)//一奇數一偶數情況下
{ //偶數在前才要交換
swap(&num[j],&num[j+1]);
}
else if(num[j]%2!=0&&num[j+1]%2!=0)//兩個皆為奇數
{
if(num[j]<num[j+1])//前者比較小才交換
{
swap(&num[j],&num[j+1]);
}
}
else if(num[j]%2==0&&num[j+1]%2==0)//兩個皆為偶數
{
if(num[j]>num[j+1])//後者比較小才交換
{
swap(&num[j],&num[j+1]);
}
}
}
}
}
for(i=0;i<n;i++)//輸出
{
cout<<num[i]<<endl;
}
}
return 0;
}
文章標籤
全站熱搜
