洛谷P1259 黑白棋子的移动
题解:
模拟棋子移动,最后几行找不到规律所以直接打表
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n; 4 char s[500]; 5 void init() 6 { 7 for (int i = 0; i < n; ++i) 8 s[i] = 'o'; 9 for (int i = n; i < 2 * n; ++i) 10 s[i] = '*'; 11 for (int i = 2 * n; i < 2 * n + 2; ++i) 12 s[i] = '-'; 13 } 14 void print() 15 { 16 for (int i = 0; i < 2 * n + 2; ++i) 17 putchar(s[i]); 18 puts(""); 19 } 20 void move(int Begin, int End) 21 { 22 swap(s[Begin], s[End]); 23 swap(s[Begin + 1], s[End + 1]); 24 print(); 25 } 26 string ans[4] = {"ooo*o**--*", "o--*o**oo*", "o*o*o*--o*", "--o*o*o*o*"}; 27 int main() 28 { 29 cin >> n; 30 init(); // 初始化棋子 31 print(); // 第一行打印 32 int len = n; 33 while (1) 34 { 35 move(len - 1, len << 1); 36 // 中间o*与末尾的--交换 37 --len; 38 if (len == 3) 39 break; 40 move(len, len << 1); // 最右边的**与--交换 41 } 42 string tmp; 43 for (int i = 0; i < n - 4; ++i) 44 tmp += "o*"; 45 for (int i = 0; i < 4; ++i) 46 cout << ans[i] << tmp << endl; 47 48 return 0; 49 }