题目描述

excel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
地图上有n个格子排成一排,最左边的格子为1,最右边的格子为n
0秒时,每个格子都有一只史莱姆。

第i只史莱姆的跳跃方向用数组a表示。a[i]=0表示史莱姆跳跃的方向是往左。若第 i 秒史莱姆位于格子 x,那么第 i+1 秒史莱姆会跳到格子 x-1 。如果当前史莱姆在格子 ,则下一秒史莱姆将跳出地图。a[i]=1表示史莱姆跳跃的方向是往右。若第 i 秒史莱姆位于格子 x,那么第 i+1 秒史莱姆会跳到格子 x+1 。如果当前史莱姆在格子n,则下一秒史莱姆将跳出地图。

米小游想知道第1~n秒,地图上有多少个格子没有史莱姆。

输入描述:
第一行包含一个整数 n(1 <= n <= 3 * 10^3),表示地图上的格子数量。

第二行包含n个整数 a[i](0 <= a[i] <= 1),表示每只史莱姆的跳跃方向

输出描述
输出包含一行n个整数,用空格隔开,第i个数表示第i秒没有史莱姆的格子数量。
输入:
3
1 0 1

输出:
1 2 3

代码实现:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//包含一个整数 n(1 <= n <= 3 * 10^3),表示地图上的格子数量
int n = sc.nextInt();
int[] a = new int[n + 1];
for (int i = 1; i <= n; i++) {
//包含n个整数 a[i](0 <= a[i] <= 1),表示每只史莱姆的跳跃方向
a[i] = sc.nextInt();
}
int[] res = new int[n + 1];
//输出包含一行n个整数,用空格隔开,第i个数表示第i秒没有史莱姆的格子数量
for (int i = 1; i <= n; i++) {
int count = 0;
for (int j = 1; j <= n; j++) {
if (a[j] == 0) {
if (j - i < 0) {//史莱姆从左边跳出地图
count++;
}
} else {
if (j + i >= n) {//史莱姆从右边跳出地图
count++;
}
}
}
res[i] = count;
}
for (int i = 1; i <= n; i++) {
System.out.print(res[i] + " ");
}
}