zoukankan      html  css  js  c++  java
  • uva401

    题目地址 : 
    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=342&mosmsg=Submission+received+with+ID+13517947


    好久没有刷题了 感觉题目比较简单 锻炼思维的严谨性 看来刷题还是很有必要的


    贴上源码 

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<string>
    using namespace std;
    //Character	Reverse	Character	Reverse	Character	Reverse
    //A	A	M	M	Y	Y
    //B		N		Z	5
    //C		O	O	1	1
    //D		P		2	S
    //E	3	Q		3	E
    //F		R		4	
    //G		S	2	5	Z
    //H	H	T	T	6	
    //I	I	U	U	7	
    //J	L	V	V	8	8
    //K		W	W	9	
    //L	J	X	X		
    //判0与o的时候要注意哦;
    char one[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
    char two[] = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
    char char_mirror[26]=
    {
    	'A','*','*','*','3','*','*','H','I','L','*','J','M',
    	'*','O','*','*','R','2','T','U','V','W','X','Y','5'
    };
    char num_mirror[10]={'0','1','S','E','*','Z','*','*','8','*'};
    int check_huiwen(char * str)
    {
    	int len = strlen(str);
    	for (int i = 0; i < len/2; i++)
    	{
    		if (str[i] == '0' && str[len-i-1] == 'O' || str[i] == 'O' && str[len-i-1] == '0')
    		{
    			continue;
    		}
    		if (str[len-i-1] != str[i])
    			return -1;
    	}
    	return 0;
    }
    
    int check_mirror(char * str)
    {
    	int len  = strlen(str);
    	for (int i = 0; i < len/2+1; i++)
    	{
    		if (isalpha(str[i]) && str[len-i-1] == char_mirror[str[i]-'A'] ||  isdigit(str[i])  && num_mirror[str[i]-'0'] == str[len-i-1])
    		{
    			continue;
    		}
    		else
    		{
    			if (str[i] == '0' &&  str[len - 1 - i] == 'O' || str[i] == 'O' && str[len - 1 - i] == '0')
    				continue;
    			return -1;
    		}
    
    	}
    	return 0;
    }
    int main()
    {
    #ifndef ONLINE_JUDGE
    	fstream cin("D://code//acm//txt//4.txt");
    #endif
    	char str[25];
    	while (cin>>str)
    	{
    		int is_huiwen = 0;
    		int is_mirror = 0;
    		if ( check_huiwen(str) == 0 )
    		{
    			is_huiwen = 1;
    		}
    		if ( check_mirror(str) == 0 )
    		{
    			is_mirror = 1;
    		}
    		if (is_huiwen && is_mirror )
    		{
    			cout<<str<<" -- is a mirrored palindrome."<<endl<<endl;
    		}
    		else if (is_huiwen && ! is_mirror)
    		{
    			cout<<str<<" -- is a regular palindrome."<<endl<<endl;
    		}
    		else if (is_mirror && ! is_huiwen)
    		{
    			cout<<str<<" -- is a mirrored string."<<endl<<endl;
    		}
    		else if (!is_huiwen && ! is_mirror)
    		{
    			cout<<str<<" -- is not a palindrome."<<endl<<endl;
    		}
    		
    	}
    	return 0;
    }
    这道题目不难却刷了很久 

    原因:

    1.样例超过去之后 每一行都多复制了一些空格,以后注意
    2.check_mirror函数for循环的终止条件i<len/2+1,中间点容易被忽视,这个也可以看作边界条件,以后注意

    3.为什么会出现第二个问题呢 因为在写check_huiwen时 就写的 i<len/2 就顺手抄了过来 不多思考 两个问题还是不一样的  细节没把握好,以后参考以前的代码时一定注意边界条件

    4.isdigit函数没有想到;

    5.#ifndef ONLINE_JUDGE   #endif

    6.

  • 相关阅读:
    web app变革之rem
    理解angularjs的作用域
    移动开发框架
    angularjs ng-repeat下验证问题
    10、长链接转短链接
    8、自定义菜单及菜单响应事件的处理
    9、多公众号集中管理
    7、消息管理-接收事件推送
    6、消息管理-普通消息接受处理
    5、用户和用户组管理-支持同步
  • 原文地址:https://www.cnblogs.com/dragonfive/p/4486214.html
Copyright © 2011-2022 走看看