转换为回文的步数

 

James找到了他的朋友Harry要给女朋友的情书。James很爱恶作剧,所以他决定要胡搞一下。他把信中的每个单字都变成了回文。对任何给定的字符串,他可以减少其中任何一个字符的值,例如'd'可以变成'c',这算是一次操作。(另外,他最多只能将字符的值减少至'a','a'不能再被减少成'z')。找出将给定字符串转换成回文所需的最少操作次数。

输入格式 
第一行包含整数 T 代表测试数据的组数。 
接着 T 行各包含一个字符串。

输出格式 
每个测试数据各输出一行,代表此数据需要的最少操作次数。

取值范围 
1 ≤ T ≤ 10
1 ≤ 字符串长度 ≤ 104

样例输入 #00

3
abc
abcba
abcd

样例输出 #00

2
0
4

样例解析

第一组数据:ab*c* -> ab*b* -> ab*a*。 
第二组数据:abcba本身已经是回文了。 
第三组数据:abc*d* -> abc*c* -> abc*b* -> abc*a* = ab*c*a -> ab*b*a。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 int getChangeToPalindromeStep(char *string);
 5 
 6 int main(int argc, const char * argv[])
 7 {
 8 
 9     // insert code here...
10 //    printf("Hello, World!\n");
11     int stringCount = 0;
12 //    printf("input string count: ");
13     scanf("%d", &stringCount);
14     int totalStep = 0;
15     int stepCount[10];
16     for (int i=0; i<stringCount; i++) {
17 //        printf("input string%d : \n", i);
18         char string[10000];
19         scanf("%s", string);
20 //        printf("%s\n", string);
21         stepCount[i] = getChangeToPalindromeStep(string);
22 //        printf("need step : %d\n", stepCount);
23         totalStep += stepCount[i];
24     }
25     for (int i=0; i<stringCount; i++) {
26         printf("%d\n", stepCount[i]);
27     }
28 //    printf("total need step : %d\n", totalStep);
29     return 0;
30 }
31 
32 int getDiffValue(char *c1, char *c2)
33 {
34     int ic1 = (int)*c1;
35     int ic2 = (int)*c2;
36     return (int)fabs(ic1 - ic2);
37 }
38 
39 int getChangeToPalindromeStep(char *string)
40 {
41     if (string == NULL) {
42         return 0;
43     }
44     if (strlen(string) == 0 || strlen(string) == 1) {
45         return 0;
46     }
47     
48     int posStart = 0;
49     int posEnd = (int)strlen(string) - 1;
50     
51     int step = 0;
52     while (posStart < posEnd) {
53         step += getDiffValue(string + posStart, string + posEnd);
54         posStart++;
55         posEnd--;
56     }
57     
58     return step;
59 }
代码

 

posted @ 2014-08-14 11:38  子柱  阅读(360)  评论(0编辑  收藏  举报