如 OOXXOXXOOO。O 表示某道题回答正确,X 表示某道题回答错误。你在某道题得到的分数就是它本身以及它之前连续的 O 的个数(即截至该题你连续答对的题目数)。
例如上例中第 1010 个问题的分数是由其自身和它的两个先前连续的 O 得的 33。
因此,OOXXOXXOOO 的得分是 1+2+0+0+1+0+0+1+2+3=101+2+0+0+1+0+0+1+2+3=10。你要编写一个计算测试结果分数的程序。
#include<stdio.h>
#include<string.h>
int main(void)
{
int n;
scanf("%d",&n);
char score[100];
while(n!=0)
{
scanf("%s",score);
int count=0;
int len;
len=strlen(score);
int p[100]={0};
int k=0;
for(int i=0;i<len;i++)
{
if(score[i]=='X'||score[i]=='x')
{
p[k++]=i; //记录x的下标位置
}
}
int find=1;
for(int t=0;t<k;t++)
{
if(p[t]!=0)
{
find=0; //判断字符串是否全是o
}
}
if(find)
{
count+=((len)*(len+1))/2;
}
else
{
if(p[0]!=0) //如果字符串第一个字母不是x
{
count+=((p[0]*(1+p[0]))/2);
}
int x=0;
while(p[x+1]!=0)
{
count+=((p[x+1]-p[x]-1)*(p[x+1]-p[x]))/2;
x++;
}
if(p[x]!=len-1)
{
count+=((len-1-p[x])*(len-p[x]))/2;
}
}
printf("%d\n",count);
n--;
}
return 0;
}
哪里错了,好像有几种情况是不行的,但我不知道是哪种