1. 程式人生 > >Java練習 SDUT-1188_各位數字之和排序

Java練習 SDUT-1188_各位數字之和排序

lse inpu class 個數 lose time pub cin int

C語言實驗——各位數字之和排序

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

給定n個正整數,根據各位數字之和從小到大進行排序。

Input

輸入數據有多組,每組數據占一行,每行的第一個數正整數n,表示整數個數,後面接n個正整數。當n為0時,不作任何處理,輸入結束。n<=10

Output

輸出每組排序的結果。

Sample Input

2 1 2
3 121 10 111
0

Sample Output

1 2
10 111 121

可以開兩個數組,一個存儲原數字,一個存儲各位數字之和,然後排序是一起變動就可以,不過想到了C裏的結構體,Java的類也是類似的功能。

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        num[] a = new num[15];
        num t = new num();
        int n,i,j;
        for(i=0;i<15;i++)
            a[i] = new num();
        while(cin.hasNextInt())
        {
            n = cin.nextInt();
            if(n==0)
                break;
            for(i=0;i<n;i++)
            {
                a[i].x = cin.nextInt();
                a[i].b = a[i].f();
            }
            for(i=0;i<n;i++)
                for(j=0;j<n-i-1;j++)
                    if(a[j].b>a[j+1].b)
                    {
                        t = a[j];
                        a[j] = a[j+1];
                        a[j+1] = t;
                    }
            for(i=0;i<n;i++)
                if(i==n-1)
                    System.out.println(a[i].x);
                else
                    System.out.print(a[i].x+" ");
        }
        cin.close();
    }
}

class num
{
    int x,b;
    int f()
    {
        int a = x,sum = 0;
        while(a!=0)
        {
            sum += a%10;
            a /= 10;
        }
        return sum;
    }
}

Java練習 SDUT-1188_各位數字之和排序