第五章习题-uva401

    xiaoxiao2021-12-14  24

    401 Palindromes

    #include<stdio.h> #include<string.h> #include<stdlib.h> char a[21] = { 'A', 'E', 'H', 'I', 'J', 'L', 'M', 'O', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '5', '8' }; char g[100][100]; int ismirror(char *b) { int i, j, n = 0, k; i = strlen(b); for (j = 0; j<i; j++) { for (k = 0; k<21; k++) { if (a[k] == b[j]) { n++; continue; } } } if (n == i) return 1; else return 0; } int isplain(char *b) { int i, k; i = strlen(b); if(i==1) return 1; for (k = 0; k<i / 2; k++) { if (b[k] != b[i - k - 1]) return 0; } return 1; } int main()//switch-case语句不熟悉 { char b[20],r[50]; int c, d, t=0, i; while (gets_s(b,20*sizeof(char))) { memset(r, 0, 50 * sizeof(char)); system("cls"); c = ismirror(b); d = isplain(b); strcat_s(r,sizeof(char)*50, b);//strcat去掉第一个的结束符然后把第二个连接到末尾 if (c == 1 && d == 1) { strcat_s(r,sizeof(char)*50, " -- is a mirrored palindrome.\n"); strcpy_s(g[t++],sizeof(char)*100, r); } else if (c == 1 && d != 1) { strcat_s(r,sizeof(char)*50, " -- is a mirrored string.\n"); strcpy_s(g[t++],sizeof(char)*100, r); } else if (c != 1 && d == 1) { strcat_s(r,sizeof(char)*50, " -- is a regular palindrome.\n"); strcpy_s(g[t++],sizeof(char)*100, r); } else { strcat_s(r,sizeof(char)*50, " -- is not a palindrome.\n"); strcpy_s(g[t++],sizeof(char)*100, r); } for (i = 0; i < t; i++) { puts(g[i]); } } return 0; }

    这段代码在visual studio中可以运行,但是uva的编译器每次都是complication error, 没办法 我只能各种找测试用例,自己输入进行测试,在oceaniwater的csdn博客中我找到了很多测试用例。可是在测试

    123ESI -- is not a palindrome. 我的输出是

    123ESI -- is a mirrored string.

    还有一下几组(先写正确输出,再写我的输出)

    E -- is a regular palindrome. E -- is a mirrored palindrome.

    3 -- is a regular palindrome. 3 -- is a mirrored palindrome.

    2 -- is a regular palindrome. 2 -- is a mirrored palindrome.

    为什么......读题读错了....mirrored palindrome的标准是:在镜像变换后,整个字符反向读和变换前正向读是一样的.......

    我傻了.......

    让我蹲墙角去.......

    附上来自别人的代码....

    /**   * Author: Gneveek   * Data: 2011-10-2   * Descripition:  UVa 401 - Palindromes   */    #include <stdio.h>   #include <string.h>   #define MAXN 1024   char const *ch = "AEHIJLMOSTUVWXYZ12358";   char const *re = "A3HILJMO2TUVWXY51SEZ8";      int is_palindrome(char *str)   {       int i,len = strlen(str);       for(i=0; i<len/2; i++)       {           if(str[i] != str[len-i-1])               return 0;       }       return 1;   }      int is_mirrored(char *str)   {       int table_len = strlen(ch);       int i,j,len = strlen(str);       if(len == 1)       {           for(j=0; j<table_len; j++)           {               if(ch[j] == str[0])                   break;           }           if(j == 21 || re[j] != str[0])               return 0;       }       else if(len > 1)       for(i=0; i<len/2; i++)       {           for(j=0; j<table_len; j++)           {               if(ch[j] == str[i])                   break;           }              if(j == 21 || re[j] != str[len-i-1])               return 0;       }       return 1;   }         int main()   {       //freopen("C:\\in.txt","r",stdin);       char str[MAXN];        while(scanf("%s",str) != EOF)       {           if(is_palindrome(str))           {               if(is_mirrored(str))                   printf("%s -- is a mirrored palindrome.\n\n",str);               else                   printf("%s -- is a regular palindrome.\n\n",str);           }           else           {               if(is_mirrored(str))                   printf("%s -- is a mirrored string.\n\n",str);               else                   printf("%s -- is not a palindrome.\n\n",str);           }       }       return 0;   }  

    来自zhouyan

    读题...hin重要啊....

    转载请注明原文地址: https://ju.6miu.com/read-970827.html

    最新回复(0)