如 OOXXO,O 表示某道题回答正确,X 表示某道题回答错误。

如 OOXXOXXOOOO 表示某道题回答正确,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;
}

哪里错了,好像有几种情况是不行的,但我不知道是哪种

查看全部
The___Shy_
The___Shy_
2020/12/04 10:28
  • c语言
  • 点赞
  • 收藏
  • 回答
    私信

2个回复