zoukankan      html  css  js  c++  java
  • sdut 1465 公共因子

    公共因子

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1465

       假设字符串也有因数,一个字符串为s1,然后可以由n个字符串s2来表示,则称s2是s1的因数。
       如“ac”是“acac”的因数。
        给两个字符串,求它们的公因数有多少个。
     

    输入

     多组数据,给定两个字符串,s1,s2。长度不超过100000,并且不含空格。
     

    输出

     每组数据一行,公因数有多少个。
     

    示例输入

    acac
    ac
    aaa
    aa

    示例输出

    1
    1

    提示

    解题思路:暴力搜索方法解题,公共因子长度一定是第一个字符串的整数倍,第一次剪枝找出所有可能(注意是“可能”)满足第一个字符串条件的因子的长度,保存在数组f1中;第二次剪枝遍历f1数组,找出所有满足第一个字符串的因子,记录它们的长度,保存在数组g1中;遍历g1数组,找出所有满足第二个字符串的公共因子的因子,用count记录所有满足条件因子的个数,count就是最后的结果,经过三次剪枝,最终可以得到答案。

    代码:

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 using namespace std;
     6 int main()
     7 {
     8     char f[100010],g[100010];
     9     while(scanf("%s%s",f,g)!=EOF)
    10     {
    11         int lenf=strlen(f),leng=strlen(g);
    12         int f1[10000]={0},g1[10000]={0},t=-1,s=-1;
    13         int i,j,k;
    14         for(i=1;i<=lenf;i++)
    15             if(lenf%i==0)f1[++t]=i;
    16         int flag;
    17         for(i=0;i<=t-1;i++)
    18         {
    19             char zhong[100010];
    20             for(j=0;j<=f1[i]-1;j++)
    21                 zhong[j]=f[j];
    22             for(j=f1[i];f[j]!='';j+=f1[i])
    23             {
    24                 flag=0;
    25                 for(k=0;k<=f1[i]-1;k++)
    26                 if(f[j+k]!=zhong[k])
    27                 {
    28                     flag=1;
    29                     break;
    30                 }
    31                 if(flag==1)break;
    32             }
    33             if(j==lenf)g1[++s]=f1[i];
    34         }
    35         g1[++s]=lenf;
    36         int count=0;
    37     for(i=0;i<=s;i++)
    38     {
    39         if(leng%g1[i]==0)
    40         {
    41             for(j=0;g[j]!='';j+=g1[i])
    42             {
    43                 flag=0;
    44                 for(k=0;k<=g1[i]-1;k++)
    45                 {
    46                     if(g[k+j]!=f[k])
    47                     {
    48                         flag=1;
    49                         break;
    50                     }
    51                 }
    52                 if(flag==1)break;
    53             }
    54             if(j==leng)count++;
    55         }
    56     }
    57     cout<<count<<endl;
    58     }
    59     return 0;
    60 }
    61         
    62         
    63              
    View Code
  • 相关阅读:
    形形色色的软件生命周期模型(1)——瀑布型、增量型
    TestNG系列之三:TestNG忽略测试
    TestNG系列之二:TestNG套件测试
    TestNG系列之:TestNG基本注解(注释)
    testng的xml文件说明(TestNG DTD)
    testng参数化(提供测试数据)
    TestNG 八 并发测试
    TestNG 七 annotation
    TestNG 六 测试结果
    TestNG 五 运行TestNG
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3407580.html
Copyright © 2011-2022 走看看