首页 > 试题广场 >

磁铁

[编程题]磁铁
  • 热度指数:1653 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

假象一个绝对光滑的,高度很高的盒子,长度为,宽度为1。在其中,有许多的光滑铁块,铁块的每一个角一定位于整数坐标上。

由于宽度为1,我们可以用二维字符图来表示每一个铁块的位置。如下图是一个长度为4,其中有7个铁块的二维字符图('x'代表铁块,'o'代表没有铁块):

oooo
xooo
xoxo
xxxx

每一列的铁块数分别为3,1,2,1

由于重力的缘故,所有的铁块要么下面是盒子底面,要么下面是另一个铁块。现在,在盒子的右边增加一个强磁铁。所有右边没有其他铁块或边界的铁块会向右移动,直到撞上一个铁块和边界停下。

在上一张二维图上,加入磁铁后的字符图会变为:

oooo

ooox

ooxx

xxxx

每一列的铁块数分别为。可以证明,这样操作后所有铁块要么下面是盒子底面,要么下面是另一个铁块。
现在给你初始每一列有多少个铁块,请你计算,加入磁铁后每一列有多少铁块。


输入描述:

输入第一行包含一个数n,代表盒子的长度
接下来n个数,空格隔开,代表每一列原本有多少个铁块。



输出描述:

输出n个数,空格隔开,代表加入磁铁后每一列有多少个铁块。

示例1

输入

4
3 1 2 1

输出

1 1 2 3

说明

对于40%的数据,n≤10,每一列铁块数不会超过10

对于100%的数据,n≤105,每一列铁块数不会超过105

import java.util.*;

public class Main{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int i = 0;
        while(sc.hasNextInt()){
            a[i] = sc.nextInt();
            i++;
        }
        Arrays.sort(a);
        for(int j = 0;j < n;j++){
        System.out.print(a[j]+" ");
        }
    }
}
发表于 2022-09-07 01:07:08 回复(0)