1 条题解
-
0
🔍 解题思路
下图是9种移动会影响的时钟。 9个按钮影响的时钟
这道题还是枚举来解决,不要问我怎么想出来的,因为这是枚举的课后习题。 直接暴力枚举9种移动,判断是否都指向了12点。 放心,最多就是4^9次循环,小的很。
#include <cstdio> void OutputResult(int i, int &count){ printf("%d", i); if(count > 1) printf(" "); count--; } int main(){ //a数组存放初始时钟状况 //b数组存放1-9个按钮被按下了多少次 //c数组存放按钮按下后时钟状况 int a[10], b[10], c[10] = {0}; for(int i = 1; i <= 9; i += 3){ scanf("%d %d %d", &a[i], &a[i+1], &a[i+2]); } for(b[1] = 0; b[1] < 4; b[1]++) for(b[2] = 0; b[2] < 4; b[2]++) for(b[3] = 0; b[3] < 4; b[3]++) for(b[4] = 0; b[4] < 4; b[4]++) for(b[5] = 0; b[5] < 4; b[5]++) for(b[6] = 0; b[6] < 4; b[6]++) for(b[7] = 0; b[7] < 4; b[7]++) for(b[8] = 0; b[8] < 4; b[8]++) for(b[9] = 0; b[9] < 4; b[9]++){ c[1] = (a[1] + b[1] + b[2] + b[4])%4; c[2] = (a[2] + b[1] + b[2] + b[3] + b[5])%4; c[3] = (a[3] + b[2] + b[3] + b[6])%4; c[4] = (a[4] + b[1] + b[4] + b[5] + b[7])%4; c[5] = (a[5] + b[1] + b[3] + b[5] + b[7] + b[9])%4; c[6] = (a[6] + b[3] + b[5] + b[6] + b[9])%4; c[7] = (a[7] + b[4] + b[7] + b[8])%4; c[8] = (a[8] + b[5] + b[7] + b[8] + b[9])%4; c[9] = (a[9] + b[6] + b[8] + b[9])%4; //如果时钟都到达12点 那么c数组的元素都应该为0 if((c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]) == 0){ int count = b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]; for(int i = 0; i < b[1]; i++) OutputResult(1, count); for(int i = 0; i < b[2]; i++) OutputResult(2, count); for(int i = 0; i < b[3]; i++) OutputResult(3, count); for(int i = 0; i < b[4]; i++) OutputResult(4, count); for(int i = 0; i < b[5]; i++) OutputResult(5, count); for(int i = 0; i < b[6]; i++) OutputResult(6, count); for(int i = 0; i < b[7]; i++) OutputResult(7, count); for(int i = 0; i < b[8]; i++) OutputResult(8, count); for(int i = 0; i < b[9]; i++) OutputResult(9, count); return 0; } } return 0; }
- 1
信息
- ID
- 167
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者