zcmu 1316: 数字7

1316: 数字7

Time Limit: 1 Sec Memory Limit: 128 MB

Description

有人很喜欢数字7,喜欢到什么程度呢,就是连能整除7的二位数也喜欢,0不能整除7。
现在有一串数字(数字的首位不为0),他只能从开头取喜欢的数字(取出的数字是连续的)求最多有几个数字他能取出

Input

有多组数据,每组数据有一个整数(至少1位,至多500位)。

Output

输出相应的答案,占一行。

Sample Input

123456789
707
Sample Output

3
3
HINT

Source

【分析】
这个题目的意思是真的模糊啊,错了好多次才总算是明白了它的意思;
它的意思是说能取出多少位数,比如取出70的话,就是取出了2位数,而且就是同一位数,只能取出来一次,比如770,如果先取77的话,就剩下0了,而不能是取77,又取70;
还要注意的一点是770这种数据,要先取7,然后再取70,这样才是最多,说得更透彻一点就是不要直接取77,而是先取7再判断后一个7能不能跟后面组合;
理解题目意思之后就好办了,大家肯定会有更好的解决方案,我先抛砖引玉了啊哈

【代码】

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int b[505],i,j;//b[i]中装的是从0~i这些数中最多能取出多少位数
    char a[505];
    while(scanf("%s",a)!=EOF)
    {
        getchar();
        i=strlen(a);
        memset(b,0,505);
        for(j=0; j<i; j++)
        {
            //如果判断条件满足就代表能取出a[j]*10+a[j+1]能被7整除,并且排除了77这种取法
            if( (j != i-1) && (a[j] != '0') &&(a[j+1]!='7')&& ( (( a[j]-'0') * 10 + (a[j+1]-'0' )) % 7 == 0 ) )
            {
                if(j==0)
                {
                    b[j]=0;
                    j++;
                    b[j]=2 ;
                }
                else
                {
                    b[j]=b[j-1];
                    j++;
                    b[j]=b[j-1]+2;
                }
            }
            else if( a[j]=='7')
            {
                if(j==0)
                {
                    b[j]=1;
                }
                else
                {
                    b[j]=b[j-1]+1;
                }
            }
            else
            {
                if(j==0)
                    b[j]=0;
                else
                    b[j]=b[j-1];
            }
        }
        printf("%d\n",b[i-1]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/DragonChilder/article/details/83450715