原题链接:蓝桥杯算法提高VIP-开灯游戏
解题思路:
只要你,够暴力,我就让你 * * *
注意事项:
参考代码:
#include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; bool light[9]; vector<string> ans; int a[][9] = { {0,0,0,0,0,0,0,0,1}, {0,0,0,0,0,0,0,1,1}, {0,0,0,0,0,0,1,1,1}, {0,0,0,0,0,1,1,1,1}, {0,0,0,0,1,1,1,1,1}, {0,0,0,1,1,1,1,1,1}, {0,0,1,1,1,1,1,1,1}, {0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1}, }; bool check() { int count = 0; for (int j = 0; j < 9; j++) if (light[j]) count += 1; if (count == 4) return true; else return false; } void solve() { for (int i = 0; i < 9; i++) { do { for (int j = 0; j < 9; j++) { if (a[i][j] == 1) { if (j == 0) { light[1] = !light[1]; light[3] = !light[3]; } if (j == 1) { light[0] = !light[0]; light[2] = !light[2]; light[4] = !light[4]; } if (j == 2) { light[1] = !light[1]; light[5] = !light[5]; } if (j == 3) { light[0] = !light[0]; light[4] = !light[4]; light[6] = !light[6]; } if (j == 4) { light[1] = !light[1]; light[3] = !light[3]; light[5] = !light[5]; light[7] = !light[7]; } if (j == 5) { light[2] = !light[2]; light[4] = !light[4]; light[8] = !light[8]; } if (j == 6) { light[3] = !light[3]; light[7] = !light[7]; } if (j == 7) { light[4] = !light[4]; light[6] = !light[6]; light[8] = !light[8]; } if (j == 8) { light[5] = !light[5]; light[7] = !light[7]; } } } if (check()) { // for (int j = 0; j < 9; j++) // cout << a[i][j]; // cout << endl; string s; for (int j = 0; j < 9; j++) s += '0' + a[i][j]; ans.push_back(s); } for (int k = 0; k < 9; k++) light[k] = false; } while (next_permutation(a[i], a[i] + 9)); } sort(ans.begin(), ans.end()); for (vector<string>::iterator it = ans.begin(); it < ans.end(); it++) cout << *it << endl; } int main() { solve(); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复