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