UVa oj AOAPC Volume 1. Elementary Problem Solving String
好好做题,天天AC,又用了几天时间,把 Volume 1的字符串给做完了,还是像以前一样,把每一道题都回顾一下,以便自己的回顾和提高,同时也方便大家互相交流。。。。。
字符串的题都不算难,一般自己就可以看出做得对不对,下面是我做的那9道水题……
第一题:401 - Palindromes
大致题意:给你个字符串,判断是不是镜像和回文。
题目分析:回文不难,一个头,一个尾,往中间扫就好了……镜像的话,题目中有定义(什么2和S,3和E啦……),我开了个数组来处理的,不知道有没有更好的方法……欢迎指教
代码: 1 #include <stdio.h> 2 #include <stdlib.h>
3 #include <string.h>
4 const int maxlen=50;
5 char a[maxlen],jingxiang[maxlen];
6 int lena;
7 bool ishuiwen ()
8 {
9 int i,j;
10 for (i=0,j=lena-1;i<j;i++,j--){
11 if (a[j]!=a[i]) return false;
12 }
13 return true;
14 }
15 bool isjingxiang ()
16 {
17 int i,j;
18 for (i=0,j=lena-1;i<=j;i++,j--){
19 if (a[i]<='9' && '1'<=a[i])
20 {
21 if (a[j] != jingxiang[a[i]-'1'+26])
22 { return false; }
23 }
24 else
25 {
26 if (a[j] != jingxiang[a[i]-'A'])
27 { return false; }
28 }
29 }
30 return true;
31 }
32 void csh ()
33 {
34 memset(jingxiang,0,sizeof(jingxiang));
35 jingxiang[0]='A';jingxiang[4]='3';jingxiang[7]='H';jingxiang[8]='I';
36 jingxiang[9]='L';jingxiang[11]='J';jingxiang[12]='M';jingxiang[14]='O';
37 jingxiang[18]='2';jingxiang[19]='T';jingxiang[20]='U';jingxiang[21]='V';
38 jingxiang[22]='W';jingxiang[23]='X';jingxiang[24]='Y';jingxiang[25]='5';
39 jingxiang[26]='1';jingxiang[27]='S';jingxiang[28]='E';jingxiang[30]='Z';jingxiang[33]='8';
40 }
41 int main()
42 {
43 int i;
44 while (gets(a)){
45 lena=strlen(a);
46 csh();
47 if (ishuiwen() && isjingxiang())
48 printf("%s -- is a mirrored palindrome.\n\n",a);
49 else if (ishuiwen())
50 printf("%s -- is a regular palindrome.\n\n",a);
51 else if (isjingxiang())
52 printf("%s -- is a mirrored string.\n\n",a);
53 else printf("%s -- is not a palindrome.\n\n",a);
54 }
55 return 0;
56 }心得体会:自己想出来用一个数组来做查询表,不知道是不是好的方法,希望大家给点建议;还有,判断是否镜像时,中间那个也要判断,我一开始中间那个没判断,WA了好几次……
第二题:10010 - Where's Waldorf?
大致题意:在一个字符串矩阵里找一个字符串,允许横,竖,斜着查找……
题目分析:我编了8个字符串匹配函数……囧o(╯□╰)o,一个一个找出来的。。。。。。有没有好方法啊???跪求……
代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h> //不是格式问题?!!!!!
4 const int maxlen=100;
5 char a[maxlen][maxlen],b[maxlen];
6 int T,m,n,lenb;
7 bool f1 (int i,int j)
8 { int k=0;
9 if (n-j<lenb) return false;
10 for (;k<lenb;k++,j++){
11 if ( a[i][j] != b[k] ) return false;
12 }
13 return true;
14 }
15 bool f2 (int i,int j)
16 { int k=0,flage;
17 flage= (i+1)<(n-j) ? (i+1):(n-j);
18 if (flage<lenb) return false;
19 for (;k<lenb;i--,j++,k++){
20 if ( a[i][j] != b[k] ) return false;
21 }
22 return true;
23 }
24 bool f3 (int i,int j)
25 { int k=0;
26 if (i+1<lenb) return false;
27 for (;k<lenb;i--,k++){
28 if ( a[i][j] != b[k] ) return false;
29 }
30 return true;
31 }
32 bool f4 (int i,int j)
33 { int k=0,flage;
34 flage=(i+1)<(j+1) ? (i+1):(j+1);
35 if (flage<lenb) return false;
36 for (;k<lenb;i--,j--,k++){
37 if ( a[i][j] != b[k] ) return false;
38 }
39 return true;
40 }
41 bool f5 (int i,int j)
42 { int k=0;
43 if (j+1<lenb) return false;
44 for (;k<lenb;j--,k++){
45 if ( a[i][j] != b[k]) return false;
46 }
47 return true;
48 }
49 bool f6 (int i,int j)
50 { int k=0,flage;
51 flage=(m-i)<(j+1)?(m-i):(j+1);
52 if (flage<lenb) return false;
53 for (;k<lenb;i++,j--,k+
补充:软件开发 , C语言 ,