close
Content
可惜,沒有下一題叫做「列排愛明明」,明明系列即將在這裡告一段落,謝謝大家這幾天來的支持!
明明喜歡把數字排成一列--用他自己的方式!
他首先先看個位數,把個位數由小到大排。接著,如果個位數字一樣的話,他會將這些數字,由大至小排。
例如,如果數字有 38 106 98 26 13 46 51 的話,那麼 51 會排最前面,因為個位數字 1 是其中最小的一個。
而 106 26 46 這三個數字,個位數同樣都是 6,所以明明會直接將他們由大至小排,也就是 106 46 26。
所以,排好之後是:51 13 106 46 26 98 38,請你幫他輸出最終結果吧!
Input
有多組測試資料,以 EOF 結束。
每組測試資料以一個 n(<=1000) 開始,表示明明拿到了幾個數字。接著有 n 個以空白隔開的整數。
Output
請輸出排序後的結果,以空白隔開。
Sample Input #1
7 38 106 98 26 13 46 51 6 1 2 3 4 5 0 5 98 76 12 34 55 6 33 33 88 88 83 38
Sample Output #1
51 13 106 46 26 98 38 0 1 2 3 4 5 12 34 55 76 98 83 33 33 88 88 38
Python
while True: try: num=int(input()) num_list=list(map(int,input().split())) num_list.sort(key=lambda z:(z%10,-z)) """ lambda為一個匿名函數,裡面我先以z%10(個數)去排列,在以加負號 (它會變成由大到小排列) """ print(*num_list) except: break
C++
#include <iostream> using namespace std; //交換用的 void swap(int *cn1,int *cn2) { int temp=*cn1; *cn1=*cn2; *cn2=temp; } int main() { int in1; //輸入有幾個數字 while(cin>>in1) //輸入數量 { int cn1[in1]; //輸入數字 //之後題目給數量再給策資就這樣寫 for(int i =0;i<in1;i++) { cin>>cn1[i]; //輸入測資 } //排列 //這個迴圈用來計算有幾個數字要交換 for(int i=0;i<in1;i++) { //這個迴圈用來交換 從第一個數字開始一個一個比較 for(int t=0;t<(in1-i-1);t++) { //個位數比較大就交換 if((cn1[t]%10)>(cn1[t+1]%10)) { swap(&cn1[t],&cn1[t+1]); } //一樣大就比較前面的位數 else if((cn1[t]%10)==(cn1[t+1]%10)) { //前面位數數字比較小的就交換 if((cn1[t]/10)<(cn1[t+1]/10)) { swap(&cn1[t],&cn1[t+1]); } } } } //輸出 for(int i =0;i<in1;i++) { cout<<cn1[i]<<" "; } //記得換行 cout<<endl; } return 0; }
文章標籤
全站熱搜