长草+错误票据(JAVA解法)

长草:用户登录

题目描述

小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。

小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。

这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,

这四小块空地都将变为有草的小块。请告诉小明,k 个月后空地上哪些地方有草。

输入描述

输入的第一行包含两个整数 n,m。

接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。

接下来包含一个整数 k。 其中 2≤n,m≤1000,1≤k≤1000。

输出描述

输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。

输入输出样例

示例

输入

4 5
.g...
.....
..g..
.....
2

输出

gggg.
gggg.
ggggg
.ggg.

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

代码

import java.util.LinkedList;
import java.util.Scanner;

public class 长草 {
    static LinkedList<grass> list = new LinkedList<>();
    static int v[][];
    static int n;
    static int m;
    static char[][] a;
    static int k;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        a = new char[n][m];
        v = new int[n][m];
        for (int i = 0; i < a.length; i++) {
            a[i] = sc.next().toCharArray();
        }
        k = sc.nextInt();
        sc.nextLine();
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] == 'g') {
                    list.add(new grass(i, j, 0));
                }
            }
        }
        bfs();
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] == 'g')
                    System.out.print(a[i][j]);
                else
                    System.out.print('.');
            }
            System.out.println();
        }
    }

    static int dx[] = { 1, -1, 0, 0 };
    static int dy[] = { 0, 0, 1, -1 };

    private static void bfs() {

        while (!list.isEmpty()) {
            grass g = list.poll();
            if (g.step == k)
                continue;
            for (int i = 0; i < 4; i++) {
                int tx = g.x + dx[i];
                int ty = g.y + dy[i];
                if (tx >= 0 && tx < n && ty >= 0 && ty < m && a[tx][ty] == '.') {
                    list.add(new grass(tx, ty, g.step + 1));
                    a[tx][ty] = 'g';
                }
            }
        }

    }

}

class grass {
    int x;
    int y;
    int step;

    public grass(int x, int y, int step) {
        this.x = x;
        this.y = y;
        this.step = step;
    }
}

错误票据:用户登录

题目描述

某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。

因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。

你的任务是通过编程,找出断号的 ID 和重号的 ID 。

假设断号不可能发生在最大和最小号。

输入描述

输入描述

要求程序首先输入一个整数 N (N<100)表示后面数据行数。

接着读入 N 行数据。

每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数(不大于10^5)。

输出描述

要求程序输出 1 行,含两个整数 m,n,用空格分隔。

其中,m 表示断号 ID,n 表示重号 ID。

输入输出样例

示例

输入

2
5 6 8 11 9
10 12 9

输出

7 9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 64M

代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class 错误票据 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();//吸收掉整数后面的换行符
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<n;i++) {
            String str = sc.nextLine();//通过字符串的形式输入不规则的数据
            String[] s = str.split(" ");
            for (int j = 0; j < s.length; j++) {
                list.add(Integer.parseInt(s[j]));//将数据添加到集合中
            }
        }
        Integer [] nums = new Integer[list.size()];
        nums = list.toArray(nums);//将集合转换为数组
        Arrays.sort(nums);//排序
        int m=0,c=0;
        for (int i = 1; i < nums.length; i++) {
            if(nums[i]-nums[i-1]>1) {
                m = nums[i-1]+1;
            }
            if(nums[i].equals(nums[i-1])) {
                c = nums[i-1];
            }
            if(m*c>0) {
                System.out.println(m+" "+ c);
                return;
            }
        }
        
    }

}

此生如若不是你,何愁青丝配红衣

猜你喜欢

转载自blog.csdn.net/zzbzxzzdf/article/details/130500289