- #include <iostream>
- #include <cstdlib>
- #include <vector>
- #include <algorithm>
- using namespace std;
- template <typename Type>
- struct Print
- {
- void operator ()(Type& item)
- {
- cout << item << '/t';
- }
- };
- // vec存储硬币,i, j为可能假币,k为真币
- void Compare(vector<int>& vec, int i, int j, int k)
- {
- if (vec[i] > vec[k])
- {
- cout << "假币为第" << i + 1 << "个,重量较重" << endl << endl;
- }
- else
- {
- cout << "假币为第" << j + 1 << "个,重量较轻" << endl << endl;
- }
- }
- void Choice(vector<int>& vec)
- {
- if (vec[0] + vec[1] + vec[2] == vec[3] + vec[4] + vec[5])
- {
- if (vec[6] > vec[7])
- {
- Compare(vec, 6, 7, 0);
- }
- else
- {
- Compare(vec, 7, 6, 0);
- }
- }
- else if (vec[0] + vec[1] + vec[2] > vec[3] + vec[4] + vec[5])
- {
- if (vec[0] + vec[3] == vec[1] + vec[4]) //可以使通过三次就找到假币
- {
- Compare(vec, 2, 5, 7);
- }
- else if (vec[0] + vec[3] > vec[1] + vec[4])
- {
- Compare(vec, 0, 4, 7);
- }
- else
- {
- Compare(vec, 1, 3, 7);
- }
- }
- else
- {
- if (vec[0] + vec[3] == vec[1] + vec[4]) //可以使通过三次就找到假币
- {
- Compare(vec, 5, 2, 7);
- }
- else if (vec[0] + vec[3] > vec[1] + vec[4])
- {
- Compare(vec, 3, 1, 7);
- }
- else
- {
- Compare(vec, 4, 0, 7);
- }
- }
- }
- int main(int argc, char *argv[])
- {
- vector<int> vec(8, 20);
- int n;
- cout << "请输入一个假币的重量(不为20)随机替换任意一个真币 :";
- cin >> n;
- srand(time(NULL));
- vec.at(rand() % 8) = n;
- cout << endl;
- Choice(vec);
- for_each(vec.begin(), vec.end(), Print<int>());
- cout << endl << endl;
- return 0;
- }
- /*
- 请输入一个假币的重量(不为20)随机替换任意一个真币 :15
- 假币为第8个,重量较轻
- 20 20 20 20 20 20 20 15
- */