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;
}

 

posted @ 2018-07-29 23:11  浮生惘语  阅读(212)  评论(0编辑  收藏  举报