• POJ 3007 Organize Your Train part II


    题意:

       如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数:

          例如字符串abba:可以按三种比例分割;1:3;2:2;3:1

          部分反转可以得到如下所有的字符串:

      

      去掉重复可以得到六个不同的字符串,输出6;
    解题思路:
      此题用反转函数reverse比较方便,然后就和模拟差不多,要列出所有情况,把不同的字符串保存在一个字符数组中,每次得到一个字符串都和该字符数字中的每一个比较,如果都不相同,把它存入字符数组;、
    直接看代码吧:
     1 //Organize Your Train part II
     2 #include<stdio.h>
     3 #include<string>
     4 #include<string.h>
     5 #include<algorithm>
     6 using namespace std;
     7 int t;
     8 char s1[201],s2[201];
     9 char map[1000][201];
    10 int ans;//全局变量,记录字符串的个数
    11 void check(char s[])//检测是否有新的字符串
    12 {
    13     for(int i=0;i<ans;i++)
    14     {
    15         if(strcmp(s,map[i])==0)
    16             return;
    17     }
    18     strcpy(map[ans++],s);
    19     return;
    20 }
    21 int main()
    22 {
    23     scanf("%d",&t);
    24     int n;
    25     while(t--)
    26     {
    27         ans=0;
    28         scanf("%s",s1);
    29         n=strlen(s1);
    30         for(int i=0;i<n-1;i++)
    31         {
    32             strcpy(s2,s1);
    33             check(s2);
    34             reverse(s2,s2+i+1);
    35             check(s2);
    36             reverse(s2+i+1,s2+n);
    37             check(s2);
    38             reverse(s2,s2+i+1);
    39             check(s2);
    40             reverse(s2,s2+n);
    41             check(s2);
    42             reverse(s2,s2+n-i-1);
    43             check(s2);
    44             reverse(s2+n-i-1,s2+n);
    45             check(s2);
    46             reverse(s2,s2+n-i-1);
    47             check(s2);
    48         }
    49         printf("%d
    ",ans);
    50     }
    51     return 0;
    52 }
     

      

  • 相关阅读:
    第五周总结
    第四周总结
    第三周总结
    开课博客
    学习进度
    个人作业1-数组
    数组
    第一周考试总结
    团队个人冲刺第六天
    团队个人冲刺第五天
  • 原文地址:https://www.cnblogs.com/PJQOOO/p/4249478.html
Copyright © 2020-2023  润新知