
已解决问题
谷歌谢安非用户在2014.03.03提交了关于“丁克C语言高手,下面是我做的程序,您帮我修正一下”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-24T10:26:55。问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换ad:mamda
第二次交换md:madma
第三次交换ma:madam(回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N<=8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
#include<stdio.h>
intmain(void)
{
intN,i,k=0;
scanf("%d",&N);
printf("%d",N);
chararr[N+1],t;
gets(arr);
printf("%s",arr);
for(i=N/2;i<N+1;i++)
{
if(arr[i]=arr[N-1-i])
conti**e;
else
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
k+=1;
}
}
printf("%s%d",arr,k);
return0;
}
详细问题描述及疑问:
问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换ad:mamda
第二次交换md:madma
第三次交换ma:madam(回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N<=8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
#include<stdio.h>
intmain(void)
{
intN,i,k=0;
scanf("%d",&N);
printf("%d",N);
chararr[N+1],t;
gets(arr);
printf("%s",arr);
for(i=N/2;i<N+1;i++)
{
if(arr[i]=arr[N-1-i])
conti**e;
else
{
t=arr[i];
arr[i]=arr[i+1];
arr[i+1]=t;
k+=1;
}
}
printf("%s%d",arr,k);
return0;
}