洛谷1259题解
程序员文章站
2022-03-21 08:34:09
...
##洛谷1259题解
我们看这道题每次都黑白两个中间得两子跟最后得空白进行交换,这一步我们实现后需要打印一次
//n 为题意中的n,程序过程中n会逐渐-1 num == 初始的n 不发生变化
公式为swap(n - 1,num * 2 - i * 2) n∈(n,1)
swap(n, num * 2 + 1 - i * 2)
swap(n - 1, num * 2 - i * 2);
swap(n, num * 2 + 1 - i * 2);
print();
System.out.println();
//第一个是交换’o’和’-’
第二个是交换‘*’和’-’
n = 7;
ooooooo*******–
==>
oooooo–****** o*
之后需要把最后的两个*中间的-进行交换
swap(n-1,num * 2 - (i+ 1) * 2)
swap(n,num * 2 + 1 - (i + 1) * 2
oooooo–****** o* == >
oooooo******–o*
按照这样就可循环完成
你以为到这里就结束了吗
我以为这道题就这么简单 没想到最后4行我搞蒙了,实在是找不到规律
就无耻的打表了
String[] ans = {
"ooo*o**--*",
"o--*o**oo*",
"o*o*o*--o*",
"--o*o*o*o*"
};
实在是无颜见江东父老
在这最后4行的
每一行后面填上o*达到数量
最后贴上ac代码
import java.util.Scanner;
public class Main {
static int n;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
n = input.nextInt();
num = n;
for (int i = 0; i < n * 2 + 2; i++) {
if (i < n)
arr[i] = 'o';
else if (i >= n && i < 2 * n) {
arr[i] = '*';
} else
arr[i] = '-';
}
print();
System.out.println();
solve(n, 0);
String[] ans = {
"ooo*o**--*",
"o--*o**oo*",
"o*o*o*--o*",
"--o*o*o*o*"
};
for (int j = 0; j < 4; j++) {
System.out.print(ans[j].toString());
for (int i = 10; i < 2 * n + 2; i += 2) {
System.out.print("o*");
}
System.out.println();
}
}
static int num;
static char[] arr = new char[250];
private static void solve(int n, int i) {
if (n == 3)
return;
swap(n - 1, num * 2 - i * 2);
swap(n, num * 2 + 1 - i * 2);
print();
System.out.println();
if (n == 4)
return;
swap(n - 1, num * 2 - (i + 1) * 2);
swap(n, num * 2 + 1 - (i + 1) * 2);
print();
System.out.println();
solve(n - 1, i + 1);
}
static void swap(int i, int j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void print() {
for (int i = 0; i < n * 2 + 2; i++)
System.out.print(arr[i]);
}
}
这个网站还真是很少人写java,作为我第一篇题解
希望能给你们提供帮助
上一篇: STM32的串口通讯
下一篇: 洛谷-P4414-ABC