其实想这样的他说啥你就写啥的题我们统称模拟算法, 这种题的关键就是他说啥你就做啥, 不要搞什么歪门邪道的是,比如说,题干让你求两个int求和,结果你却用高精度加法求和。
话说回来,我们先来看题,题干说这道题就是给定一串输与赢的字符串,以"E"结尾, 然后让你算一下11分值下和21分值下的结果, 但这里要注意题目说停止记录的规定。规定是,在 11 分制下,比赛结果是11:0或0:11, 在 21 分制下,比赛结果是21:0或0:21, 而且在两种分值下都要保证分差大于或者等于 2,才一局结束。
那么判断比赛是否结束的程序便是:
if((w11 >= 11 || l11 >= 11) && abs(w11 - l11) >= 2)
{
cout << w11 << ':' << l11 << endl;
w11 = 0;
l11 = 0;
}
if((w21 >= 21 || l21 >= 21) && abs(w21 - l21) >= 2)
{
v.push_back(w21);
v.push_back(l21);
w21 = 0;
l21 = 0;
}
然后在套个while来输入和记录情况,所以整个程序便是
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
int w11 = 0, l11 = 0, w21 = 0, l21 = 0;
vector<int> v;
char ch;
while(cin >> ch)
{
if('E' == ch)
{
cout << w11 << ':' << l11 << endl<< endl;
break;
}
if('W' == ch)
{
w11++;
w21++;
}
else
{
l11++;
l21++;
}
if((w11 >= 11 || l11 >= 11) && abs(w11 - l11) >= 2)
{
cout << w11 << ':' << l11 << endl;
w11 = 0;
l11 = 0;
}
if((w21 >= 21 || l21 >= 21) && abs(w21 - l21) >= 2)
{
v.push_back(w21);
v.push_back(l21);
w21 = 0;
l21 = 0;
}
}
for(int i = 0; i < v.size(); i += 2)
{
cout << v[i] << ':' << v[i + 1] << endl;
}
cout << w21 << ':' << l21;
return 0;
}