zcmu 1316: 數字7
阿新 • • 發佈:2018-11-14
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;
}