The___Shy_ 2020-12-04 10:28 采纳率: 57.1%
浏览 59

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

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

  • 写回答

3条回答 默认 最新

  • qq_25376897 2020-12-04 11:40
    关注
    #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 k=0;
    		for(int i=0;i<len;i++)
    		{
    			if(score[i]=='X'||score[i]=='x')
    			{
    				k=0;
    			}else{
    			    k++;
    			    count+=k;
    			}
    		}
    		printf("%d\n",count);
    		n--;
    	}
    	return 0;
    }
    评论

报告相同问题?