欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷P1259 Java解法

程序员文章站 2022-07-13 13:48:09
...

题目出处点这里
洛谷P1259 Java解法思路:
1、第一行为原来的状态
2、第二行把第一行空格左边的中间的两个棋子与空格换位
3、第三行把第二行的空格与最后两个黑棋互换(也可以看作把黑子向左移两格)
4、第四行把第三行空格左边的中间的两个棋子与空格换位
5、。。。。。同上

据此,我们可以使用递归完成此题
但是注意到从倒数第四行开始,棋子的移动开始变得扑朔迷离起来,我找了一会没找到规律,于是我们可以选择直接将其打出来

代码里有注释:

package reintroduction_recursion;

import java.util.Scanner;

public class P1259 {

	static StringBuilder sb;
	static int n;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		sb = new StringBuilder();
		n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			sb.append("o");
		}
		for (int i = 0; i < n; i++) {
			sb.append("*");
		}
		sb.append("--");
		System.out.println(sb);
		m(n);
		// 既然找不到规律,我们直接将后三行打出来即可
		sb.replace(3, 5, "*o");
		sb.replace(7, 9, "--");
		System.out.println(sb);
		sb.replace(1, 3, "--");
		sb.replace(7, 9, "oo");
		System.out.println(sb);
		sb.replace(1, 3, "*o");
		sb.replace(6, 8, "--");
		System.out.println(sb);
		sb.replace(0, 2, "--");
		sb.replace(6, 8, "o*");
		System.out.println(sb);
	}

	public static void m(int n) {
		// 先判断是否可以结束递归
		if (n <= 3) {
			return;
		}
		if (n >= 4) {
			//这里需要注意n=4的时候可以输出此段
			sb.replace(n - 1, n + 1, "--");
			sb.replace(2 * n, 2 * (n + 1), "o*");
			System.out.println(sb);
		}
		if (n > 4) {
			//这里需要注意n=4的时候是不可以输出此段的,因为n=4时应该输出的是倒数第四行的格式
			sb.replace(n - 1, n + 1, "**");
			sb.replace(2 * (n - 1), 2 * n, "--");
			System.out.println(sb);
		}

		m(n - 1);
	}

}