Life of xhu

About

毕设进行时 & HOJ_1403

Feb 19, 2014

  |   #日常   |   #HOJ

昨天去见导师了,导师把毕业设计的题目说了一下,是一个硬件项目,转台控制系统,代码是已经有了,导师说有些源代码有些地方还没完全实现要求,所以我需要把代码读懂后,进行改进,导师还很贴心地把开发环境也给我了,前段时间看了一下PIC编程的教程,感觉和ANSI C差别不是很大,只是编译器自己定义了一些接口和关键字,应该不会很难。

话说回来,导师开口就说代码有几千行,吓shi我了,回来一看,也没这么多嘛,我还是很有信心的~

然后就是减肥的事,真的不能更胖了!在家吃习惯了,到这边真是经常饿,但是为了和豆豆去了南方后能给她一个帅气的男盆友,我要忍!!

一切都没有变坏,我确定我尚能掌握,加油!!

~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~

说一下,以后要是出现需要查询ASCII的情况,别傻了吧唧新建test.cpp了,直接用Ruby就好,进入irb,输入如下代码就可以得到结果:

'9'.ord     # => 57
57.chr     # => "9"

然后就是一道HOJ题,题意是给一个字符串进行判断,是回文数还是镜像术,或者两者的特征都具备,题意还是很简单的,我的思路就是通过两次循环,分别判断这两个特征,然后根据两个布尔型变量的值的情况,进行输出。

当然,一开始还是WA了,看了一下,如果字符串是奇数个,中间那个数没有考虑,改之~

好吧,又发现一个错误,如果只有一个数,肯定是满足回文数的,但是镜像术就不一定满足了,而且刚刚的循环无法判断,算了,写一个额外情况吧,改之~

但是,万万没想到,居然还是WA。。。

想了好半天,考虑了无数种情况,还是不行,算了,就这样吧,代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

int main(){
    int pair[100], len;
    for(int i = 0; i < 100; i++) pair[i] = 0;
        pair[(int)'0'] = (int)'0';
    pair[(int)'A'] = (int)'A';
    pair[(int)'E'] = (int)'3';
    pair[(int)'H'] = (int)'H';
    pair[(int)'I'] = (int)'I';
    pair[(int)'J'] = (int)'L';
    pair[(int)'L'] = (int)'J';
    pair[(int)'M'] = (int)'M';
    pair[(int)'O'] = (int)'O';
    pair[(int)'S'] = (int)'2';
    pair[(int)'T'] = (int)'T';
    pair[(int)'U'] = (int)'U';
    pair[(int)'V'] = (int)'V';
    pair[(int)'W'] = (int)'W';
    pair[(int)'X'] = (int)'X';
    pair[(int)'Y'] = (int)'Y';
    pair[(int)'S'] = (int)'5';
    pair[(int)'1'] = (int)'1';
    pair[(int)'2'] = (int)'S';
    pair[(int)'3'] = (int)'E';
    pair[(int)'5'] = (int)'Z';
    pair[(int)'8'] = (int)'8';
    char str[30];
    bool state[4];
    while(scanf("%s", str) != EOF){
        cout << str << ' ';
        len = strlen(str);
        if(len == 1){
            if(pair[(int)str[0]] == (int)str[0]) cout << "-- is a mirrored palindrome." << endl << endl;
            else  cout << "-- is a regular palindrome." << endl << endl;
        }else{
            bool isPal = false, isMir = false;

            for (int i = 0, j = len - 1; i < j; i++, j--){
                if ((str[i] == 'O' && str[j] == '0') || (str[i] == '0' && str[j] == 'O')) isPal = true;
                else if (str[i] == str[j]) isPal = true;
                else{
                    isPal = false;
                    break;
                }
            }  

            for(int i = 0, j = len - 1; i < j; i++, j--){
                if ((str[i] == 'O' && str[j] == '0') || (str[i] == '0' && str[j] == 'O')) isMir = true;
                else if(pair[(int)str[i]] == (int)str[j]) isMir = true;
                else{
                    isMir = false;
                    break;
                }
            }

            if(len % 2 == 1)
                if(pair[(int)str[len / 2]] != (int)str[len / 2])
                    if(isMir)
                        isMir = false;

            if(!isPal && !isMir)   
                cout << "-- is not a palindrome." << endl << endl;  
            else if(!isPal && isMir)  
                cout << "-- is a mirrored string." << endl << endl;  
            else if(isPal && !isMir)  
                cout << " -- is a regular palindrome." << endl << endl;  
            else if(isPal && isMir)  
                cout << "-- is a mirrored palindrome." << endl << endl;     
        }
    }
}