首页 > 试题广场 >

磁铁

[编程题]磁铁
  • 热度指数:1651 时间限制: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.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] strArr = br.readLine().trim().split(" ");
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) arr[i] = Integer.parseInt(strArr[i]);
        Arrays.sort(arr);
        for(int i = 0; i < n; i++) System.out.print(arr[i] + " ");
    }
}
python版
n = int(input())
print(' '.join(list(map(str, sorted(list(map(int, input().split())))))))

编辑于 2021-09-02 15:33:25 回复(0)
import java.util.*;
public class Main{
    public static void main(String args[])
    {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int a[]=new int[n];int i=0;
        while(in.hasNextInt())
        {
 
            a[i]=in.nextInt();
            i++;
 
        }
        Arrays.sort(a);
        for(int ii:a)
        {
            System.out.print(ii+" ");
        }
 
    }
}

发表于 2021-08-25 10:00:58 回复(1)
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)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++){
            arr[i] = in.nextInt();
        }
        Arrays.sort(arr);
        for(int i:arr){
            System.out.print(i+" ");
        }
        
        
    }
    
}
发表于 2022-08-07 22:38:53 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] sp = br.readLine().split(" ");
        int[] arr = new int[n];
        for (int i = 0; i < sp.length; i++) {
            arr[i] = Integer.parseInt(sp[i]);
        }
        Arrays.sort(arr);
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}

发表于 2021-09-21 19:14:41 回复(0)
l=int(input())
num=list(map(int,input().split()))
for i in range(1,len(num)):
    if num[i]==0 and num[i-1]!=0:
        num[i-1]-=1
res = [str(i) for i in sorted(num)]
print(" ".join(res))

发表于 2021-08-27 16:31:02 回复(0)