CH3-UVA401

2016-11-17  本文已影响30人  sixleaves

总结:

思维易错:

题目其实并不是很复杂。容易观察到回文串的规律, 但是对于镜像串假设为len长,划分为两部分是[0, len/2)和[len/2, len).由于C++是向下取整,所以可能造成[0, len/2]比[len/2, len)少1。所以如果只判断一半的话,应该是[0, len / 2 + 1)或者[0, (len + 1) / 2);

相关API:
//
// Created by sixleaves on 16/11/17.
//
#include <cstdio>
#include <cstring>
#include <cctype>
const char* reverseTable = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
const char* msg[] = {" -- is not a palindrome.", " -- is a regular palindrome.",
" -- is a mirrored string.", " -- is a mirrored palindrome."};

char reverseChar(char ch) {
    if (isdigit(ch)) {
        return reverseTable[ch - '1' + 26];
    }
    return reverseTable[ch - 'A'];
}

int main () {

    char line[100] = {0};
    while (scanf("%s", line) != EOF) {

        int rM = 1, cP = 1;
        int len = strlen(line);

        for (int i = 0; i < (len + 1) / 2; i++) {
            if (line[i] != line[len - 1 - i]) {
                cP = 0;
            }

            if (reverseChar(line[i]) != line[len - 1 - i]) {
                rM = 0;
            }

        }
        printf("%s%s\n\n", line, msg[rM * 2 + cP]);
    }

    return 0;
}
package CH3.ArraryAndStrings;

import java.util.Scanner;

/**
 * Created by sixleaves on 16/11/17.
 */
public class UVA401 {

    static final String reverseTable = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
    static public void main(String[] args) {

        final String[] msg = new String[]{" -- is not a palindrome.", " -- is a regular palindrome.",
                " -- is a mirrored string.", " -- is a mirrored palindrome."};

        int rM, cP;
        int kcase = 0;
        Scanner cin = new Scanner(System.in);

        while (cin.hasNext()) {


            rM = cP = 0;

            String line = cin.nextLine();
            int len = line.length();
            cP = 1;
            for (int i = 0; i < len / 2; i++) {
                if (line.charAt(i) != line.charAt(len - 1 - i)) {
                    cP = 0;
                    break;
                }
            }

            StringBuilder mirror = new StringBuilder();
            for (int i = len -1; i >=0; i--) {
                mirror.append(reverseChar(line.charAt(i)));
            }
            rM = 0;
            if (mirror.toString().equals(line)) rM = 1;
            System.out.println(line + msg[rM * 2 + cP]);
            System.out.println();
        }

    }

    static public char reverseChar(char ch) {

        if (Character.isDigit(ch)) {
            return reverseTable.charAt(ch - '1' + 26);
        }
        return reverseTable.charAt(ch - 'A');
    }

}
上一篇下一篇

猜你喜欢

热点阅读