原视频:程序设计与算法(二)算法基础_中国大学MOOC(慕课) (icourse163.org)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90#include <iostream> #include <cstring> using namespace std; char Left[3][7]; // 存放左侧硬币 char Right[3][7];//存放右侧硬币 char result[3][7];//存放右边天平的结果 bool IsFake(char c, bool light); int main() { //输入组数 int n; cin >> n; while(n--) { //输入左侧硬币、右侧硬币和结果 for(int i = 0; i < 3; i++) { cin >> Left[i] >> Right[i] >> result[i]; } //从硬币A到硬币L便利猜测 for(char c = 'A'; c < 'L'; c++) { //先猜测硬币是轻的,调用IsFake函数可以通过比较判断c是否为假币 if(IsFake(c, true)) { cout << c << "是轻的假币n"; break; } else if(IsFake(c, false)) { cout << c << "是重的假币n"; break; } } } return 0; } //判断猜测的硬币是否为假币,第一个参数为硬币编号、第二个参数为是轻(true)还是重(false) bool IsFake(char c, bool light) { //假设假币是轻的,在哪边天平哪边就会起来 for(int i = 0; i < 3; i++) { char *PLeft, *PRight; //轻的话右侧天平会翘起来 if(light) { PLeft = Left[i]; PRight = Right[i]; } //重的话反向设置 else { PLeft = Right[i]; PRight = Left[i]; } switch(result[i][0]) { //如果右边升高了,假币轻的话就是右侧,重的话就是在左侧 //但前面我们将重的结果调换了,所以都是在PRight中 case 'u': if(strchr(PRight, c) == NULL) return false; break; //如果平的,那么所有的编号都是真币 case 'e': if(strchr(PLeft, c) || strchr(PRight, c)) return false; break; //右边下降了就是轻的在左侧,或者重的在右侧,同上 case 'd': if(strchr(PLeft, c) == NULL) return false; break; } } //执行到这说明符合条件,返回true return true; } /*1 ABCD EFGH even ABCI EFJK up ABIJ EFGH even*/
最后
以上就是陶醉大雁最近收集整理的关于称硬币(中国大学mooc算法设计与分析(二))习题练习的全部内容,更多相关称硬币(中国大学mooc算法设计与分析(二))习题练习内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复