zoukankan      html  css  js  c++  java
  • A1077. Kuchiguse

    The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:

    • Itai nyan~ (It hurts, nyan~)
    • Ninjin wa iyada nyan~ (I hate carrots, nyan~)

    Now given a few lines spoken by the same character, can you find her Kuchiguse?

    Input Specification:

    Each input file contains one test case. For each case, the first line is an integer N (2<=N<=100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.

    Output Specification:

    For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write "nai".

    Sample Input 1:

    3
    Itai nyan~
    Ninjin wa iyadanyan~
    uhhh nyan~
    

    Sample Output 1:

    nyan~
    

    Sample Input 2:

    3
    Itai!
    Ninjinnwaiyada T_T
    T_T
    

    Sample Output 2:

    nai

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<string.h>
     5 using namespace std;
     6 void rev(char a[]){
     7     int len = strlen(a);
     8     for(int i = 0; i < len / 2; i++)
     9         swap(a[i],a[len - 1 - i]);
    10 }
    11 int main(){
    12     int N, minL = 99999, tag = 1, len = 0;
    13     char str[100][1000], sen[1000];
    14     scanf("%d", &N);
    15     getchar();
    16     for(int i = 0; i < N; i++){
    17         gets(str[i]);
    18         rev(str[i]);
    19         if(minL > strlen(str[i]))
    20             minL = strlen(str[i]);
    21     }
    22     for(int i = 0; i < minL; i++){
    23         char c = str[0][i];
    24         for(int j = 0; j < N; j++)
    25             if(str[j][i] != c){
    26                 tag = 0;
    27                 break;
    28             }
    29         if(tag == 0)
    30             break;
    31         len++;
    32     }
    33     if(len != 0)
    34         for(int j = len - 1; j >= 0; j--)
    35             printf("%c", str[0][j]);
    36     else
    37         printf("nai");
    38     cin >> N;
    39     return 0;
    40 }
    View Code

    总结:

    1、本题即求公共后缀,由于每个字符串长度不一,可以在输入字符串后逆序,转换为求公共前缀。

    2、关于字符串的处理,本题无法使用scanf的%s读入字符串,因为字符串中存在空格。所以可以用gets(),在遇到回车时结束。但要注意,在scanf读入N后,还存在一个回车键,需要被吸收掉,否则会导致gets()读到一个回车空串。

    3、由于PAT不支持gets()读入带空格的一行。以后遇到复杂的字符串题时,使用string而不是char[]。

  • 相关阅读:
    网卡
    java调用函数参数的传递机制及java内存管理
    zookeeper安装遇到的问题
    tcp/ip,http,socket mysql底层技术原理
    前台页面
    权限模块设计及使用
    spring security学习,使用过程
    mybatis处理集合、循环、数组和in等语句的使用
    sql语句的一些学习
    java 实现获取当天,当周,当月,当季,当年的时间段
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8442855.html
Copyright © 2011-2022 走看看