剪花布条

106 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 

Input

输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。 

Output

输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。 

Sample Input

abcde a3
aaaaaa  aa
#

Sample Output

0
3

 题意:

思路:

Code: (2019.8.17)

#include<stdio.h>
#include<string.h>
typedef long long ll;
const int N=1e6+10;
#include<algorithm>
using namespace std;
char a[1010],b[1010];
int main()
{
    while(~scanf("%s",a))
    {
        if(a[0]=='#')
            break;
        int l=strlen(a);
        scanf("%s",b);
        int ll=strlen(b);
        int sum=0;
        int i=0,j=0;
        while(i<l)
        {
            if(a[i]==b[j])
            {
                i++;
                j++;
                if(j==ll)
                {
                    sum++;
                    j=0;
                }
            }
            else i++,j=0;
        }
        printf("%d\n",sum);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
    }
    return 0;
}

Code:(2019.4.9)

当时想的有点复杂,不过终也实现为代码了~

#include<stdio.h>
#include<string.h>
char a[1010],b[1010];
int main()
{
    int i,j,k;
    while(~scanf("%s",&a)!=EOF)
    {
        int m,n,flag=0;
        char c[1010]= {'\0'};
        getchar();
        if(a[0]=='#')
            break;
        scanf("%s",&b);
        m=strlen(a);
        n=strlen(b);
        for(i=0; i<m; i++)
        {
            for(j=i,k=0; k<n; k++,j++)
                c[k]=a[j];
            if(strcmp(c,b)==0)///也不知道当时的脑回路~不过也算的上为一种方法!
            {
                flag++;
                a[j-1]='\0';
            }
        }
        printf("%d\n",flag);
    }
    return 0;
}

 Code:(2019.4.15)

和上面的一个思路但和2019.8.17的不一个思路了,这条道路回头看的时候,会有一丝轻松的感觉

#include<stdio.h>
#include<string.h>
char a[1010],b[1010],c[1010];
int main()
{
    while(~scanf("%s",&a)&&a[0]!='#')
    {
        scanf("%s",&b);
        memset(c,0,sizeof(c));
        int m,n,i,j,k,flag=0;
        m=strlen(a);
        n=strlen(b);
        for(i=0; i<m; i++)
        {
            for(j=i,k=0; k<n; k++,j++)
                c[k]=a[j];
            if(strcmp(c,b)==0)
                flag++;
        }
        printf("%d\n",flag);
    }
    return 0;
}