解题思路:递归, 4以下写的很苦, 不优化了
注意事项:格式
参考代码:
#include<iostream> #include<limits> #include<cstring> #include<cmath> using namespace std; const int N = 1e5 + 10; char a[N]; int m; void print(int i){ printf("step%2d:",i); for(int i = 1; i <= 2 * m + 2; i ++){ cout << a[i]; } cout << endl; } void dfs(int n,int l){ if(n > 4){ a[2*n + 1] = a[n]; a[2*n + 2] = a[n + 1]; a[n] = a[n + 1] = '-'; print(l++); a[n] = a[2 * n - 1]; a[n + 1] = a[2 * n - 2]; a[2 * n - 1] = a[2* n ] = '-'; print(l++); dfs(n - 1, l); } if(n == 4){ a[2*n + 1] = a[n]; a[2*n + 2] = a[n + 1]; a[n] = a[n + 1] = '-'; print(l++); a[n] = a[2 * n ]; a[n + 1] = a[2 * n + 1]; a[2 * n] = a[2* n + 1] = '-'; print(l++); a[2*n] = a[n- 2]; a[2*n + 1] = a[n- 1]; a[n-2] = a[n - 1] = '-'; print(l++); n--; a[n-1] = a[2*n + 1]; a[n] = a[2*n + 2]; a[2*n + 1] = a[2*n + 2] = '-'; print(l ++); a[2*n + 1] = a[n - 2] ; a[2*n + 2] = a[n - 1] ; a[n - 2] = a[n - 1] = '-'; print(l ++); return; } } int main() { cin >> m; for(int i = 1; i <= m; i ++){ a[i] = 'o'; a[i + m] = '*'; } a[2*m + 1] = a[2*m + 2] = '-'; print(0); dfs(m,1); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复