C语言高手,下面是我做的程序,您帮我修正一下

时间:2014.03.03 发布人:谢安非

C语言高手,下面是我做的程序,您帮我修正一下

已解决问题

谷歌谢安非用户在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;

}


期待您的答案,不知道说什么,送你一朵小红花吧 !
希望以下的回答,能够帮助你。

第1个回答

用户名:whoami1978  

///程序是有问题的,特别是算法部分,我没改,你再看下

#include<stdio.h>

#defineMAXN8000


intmain(void)

{

intN,i,k来自=0;

chararr[MAX件故无远府N+1],t;//MAXN是题目设定的

scanf("%d",&N);

printf("%d\n",N);//要求有回问答车的


if(N>MAXN)

{

printf("Impossibl果协应e\n");//输入太大了

r坚克包空王eturn-1;

}

//chararr[N+1],t;这个只有C11或C++0x才支持,因为移植性不好,不建议

fflush(stdin);//如果你混用s常称阻矛误项轴或常约canf和gets,这个是必须的

gets(arr);


printf("%s\n",arr);//加一个回车


////以下算法肯定是有问题的,自己再想下,还要虑只有1,2,3个字符的情完诗磁阻院本况(5个也不对)


for(i=N/2;i<N-1;i++)//下面有arr[i+1],你的字符为0..N-1**N个

{

if(arr[i]==arr[N-1-i])//判断要用==

conti**e;

e提lse

{

t=arr[i];

arr[i]=arr[i+1];

arr[i+1]=t;

k+=1;

}

}


printf("%s%d\n",arr,k果支扬华碑二个);

return0;

}