问题标题:
【解出并解释一下C语言的这个题目(完美的代价)完美的代价回文串是一种特殊的字符串,它从左往右读和从右往左读是一样的,有人认为回文串是一种完美的字符串。现在给你一个字符串,】
问题描述:

解出并解释一下C语言的这个题目(完美的代价)

完美的代价

回文串是一种特殊的字符串,它从左往右读和从右往左读是一样的,有人认为回文串是一种完美的字符串。现在给你一个字符串,它不一定是回文的,请你计算最少的交换次数使得该字符串变成一个回文串。这里的交换指将字符串中两个相邻的字符互换位置。

例如所给的字符串为”mamad”,第一次交换a和d,得到”mamda”,第二次交换m和d,得到”madma”;第三次交换最后面的m和a,得到”madam”。

编写程序,从键盘读入数据。第一行是一个整数N(N

吕兴亚回答:
  //说明:此程序编译通过的,你看看吧。最短交换的算法就是:交换从两端到中间,就是最优。   //算法思想具体如下:   1、从左边第i的字符串开始逐个开始与x比较是否相等   2、在字符串右边第n-i-1个位置开始,向左寻找与之相同的字符。   3、找到字符后将其逐个向右移动,统计交换次数   当遇到奇数字母时,反向搜索。见代码。即看2’的算法   2‘、在字符串左边第i个位置开始,向右寻找与第n-i-1位置相同的字符。   #include   intchanges(chars[],charx,intn);   charx='0';   voidmain()   {   intn,i,k=0,b[26]={0},j;   chary,s[8001]={0};   scanf("%d",&n);   getchar();   for(i=0;i
查看更多
其它推荐
热门其它推荐