1. 程式人生 > >zcmu 1316: 數字7

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