作业帮 > 综合 > 作业

求解C语言 高手进 可适当加分 在线等

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/30 14:29:06
求解C语言 高手进 可适当加分 在线等
回文串是一种特殊的字符串,它从左往右读和从右往左读是一样的,有人认为回文串是一种完美的字符串。现在给你一个字符串,它不一定是回文的,请你计算最少的交换次数使得该字符串变成一个回文串。这里的交换指将字符串中两个相邻的字符互换位置。
例如所给的字符串为”mamad”,第一次交换a和d,得到”mamda”,第二次交换m和d,得到”madma”;第三次交换最后面的m和a,得到”madam”。
编写程序,从键盘读入数据。第一行是一个整数N(N <= 80),表示所给字符串的长度,第二行是所给的字符串,长度为N且只包含小写英文字母。如果所给字符串能经过若干次交换变成回文串,则输出所需的最少交换次数;否则,输出Impossible。
输入输出示例1
5
mamad
3
输入输出示例2
6
aabbcd
Impossible
求解C语言 高手进 可适当加分 在线等
#include
#include
int main()
{
int n,n1,x,y=0,m=0,i,j,k,tong;
char *a,b[81],ch,dan=0;
//n表示字符串的字母个数,n1没有用,i,j,k是循环控制变量同时也是数组的下标
//a用来保存待判定的字符串,b用来存放已出现的字母
//其他变量在程序中有解释
printf("请输入字符串的字母个数n="); //输入提示
scanf("%d",&n); //输入字符串包含字母的个数
a=(char *)malloc(sizeof(char)*n+1);//为字符串分配存储空间
a[n]=0; //给字符串加结束符
b[0]=0; //给b数组加结束符
printf("请输入字符串:"); //输入提示
scanf("%s",a); //输入字符串
for(i=0,k=0;i