问题标题:
【解出并解释一下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
查看更多