转换为回文的步数

 

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 }
代码

 

你可能感兴趣的:(转换)