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;
}
arrow
arrow
    文章標籤
    高中生程式解題 python C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()