UVA1585 - Score(紫书习题3.1)
如何计算你们的得分呢?,如“OOXXOXXOOO”。 “O”表示问题的正确答案,“X”表示错误的答案。那么它得分是由它自己和它刚刚以前连续的'O'只有当答案是正确的。
例如,第10个问题的分数是由其自身和它的两个先前连续的“0”获得的3。
因此,“OOXXOXXOOO”的得分是通过“1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 2 + 3”计算的10。你要编写一个计算测试结果分数的程序。
输入
输入第一行一个整数T,表示由T个测试用例组成。
每个测试用例以包含由'O'和'X'组成的字符串的行开始,并且字符串的长度大于0且小于80.在'O'和'X'之间没有空格。
输出
每个测试用例输出一行。该行是包含测试用例的分数。
样例输出
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
样例输出
10
9
7
55
30
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
string s;
int t;
cin>>t;
while(t--)
{
cin>>s;
int i,j,sum=0,t=0;
int l=s.length();
for(i=0;i<l;++i)
{
t=0;
if(s[i]=='O')
{
t=1;
sum+=t;
for(j=1;j<l;++j)
{
if(s[i+j]=='O')
{
++t;
sum+=t;
}
else
break;
}
i+=j-1;
}
}
cout<<sum<<endl;
}
return 0;
}