原文

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若不懂可以參考以下網站

http://wp.mlab.tw/?p=176

 

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;
}
 
文章標籤
全站熱搜
創作者介紹
創作者 豪CO 的頭像
豪CO

程式道路,必為豐富

豪CO 發表在 痞客邦 留言(0) 人氣(2,975)