智商(IQ)是智力商数的简称,指的是一种表示人的智力高低的数量指标。智商是智力年龄被生理年龄相除而得出的商数。智商表示人的聪明程度,智商越高,表示越聪明。智商在140以上的人通常被成为天才或近于天才,120-140为智力优异,110-120的人智力较高,90-110为普通智力,80-90 迟钝偶为低能,而70-80 介乎迟钝与低能之间(也可归入低能),70以下便确定为低能。以下是一张全球各地区平均IQ分布表:
在一次偶然的谈话中,小辉辉同学表示自己的智商高达130,这让大家大为惊叹,于是大家决定出一道题来考考他。给他一个字符串,让他数数这里面一共有多少“130”,并计算这个字符串的得分。具体规则如下:(以130143090为例)
任取三个字符,顺序与其在字符串中的顺序一致,如果它们依次是“1”、“3”、“0”,则:
如果它们连续,得52分 130143090
如果他们仅有两个数连在一起,得19分 130143090、130143090、130143090、130143090
如果3个数均不连续,仅得1分130143090、130143090 所以对于这个字符串,一共有7个“130”,得分为52+4*19+2*1 = 130分。
Input
输入包含多组数据(组数不超过20,以EOF结束),每组数据一行,保证每个字符串的长度不超过200且仅由数字组成。
Output
对应于输入文件的每一行,先输出“Xiao Huihui:”(不含引号),然后输出一个空格和一个整数n。表示该串的得分。
Sample Input
130143090
Sample Output
Xiao Huihui: 130
解题思路:
本题是简单的查找,我选择的是暴力查找,方法好想,但容易超时,结果还是AC了。
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,n,sum;
char a[220];
while(scanf("%s",a)!=EOF)
{
sum=0;
n=strlen(a);
for(i=0;i<n;i++)//遍历数组找到数字‘1’,并逐个遍历
{
if(a[i]=='1')
{
for(j=i+1;j<n;j++)//遍历数组找到数字‘3’,并逐个遍历
{
if(a[j]=='3')
{
for(k=j+1;k<n;k++)//遍历数组找到数字‘0’,并逐个遍历
{
if(a[k]=='0')
{
if(j==i+1&&k==j+1)
sum+=52;
if((j==i+1&&k>j+1)||(j>i+1&&k==j+1))
sum+=19;
if(j>i+1&&k>j+1)
sum+=1;
}
}
}
}
}
}
printf("Xiao Huihui: %d\n",sum);
}
return 0;
}