| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:回文C语言小难题,盼各位帮忙,谢谢
只看楼主 加入收藏
纯属菜鸟
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-9-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
回文C语言小难题,盼各位帮忙,谢谢
题目:完美的代价
   “回文串”,是一种特殊的字符串,它从左往右和从右往左读是一样的。有人认为回文串
是一种完美的字符串。现在给你一个字符串,它不一定是回文串,请你计算最少的交换次数
使得该串变成一个回文串。这里的交换指将字符串中两个相邻的字符互换位置,例如所给的
字符串为mamad,第一次交换ad,得到mamda;第二次交换md,得到madma;第三次交
换ma,得到madam(回文!完美!)
    程序要求从键盘读入数据。第一行是一个整数N(N<=8000),表示所给字符串的长度,
第二行是所给的字符串,长度为N 且只包含小写英文字母。如果所给字符串能经过若干次
交换变成回文串,则输出所需的最少交换次数;否则,输出Impossible。如下面两个例子:
   例1:
                              5
                            mamad
                              3
   例2:
                              6
                            aabbcd
                           Impossible   


想的头要暴掉了,各位大虾帮帮忙吧~~~~~~~~~~~
谢谢……
搜索更多相关主题的帖子: C语言 难题 回文 
2009-09-16 16:43
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:10 
大至思路:先判断字符串是否是回文,如是回文从字串最后一个字符找与第一字符匹配的,把它放在最后一个,再从倒数第二字符开始找与第二字符匹配的,直到找回字符串的中间,n/2.一字串回文排完。
程序代码:
#include <stdio.h> 
main() 
{  int  n,n1,x,y=0,m=0,i,j,k,tong; 
   char *a,b[27],ch,dan=0; 
   printf("n="); 
   scanf("%d",&n); 
   a=(char *)malloc(sizeof(char)*n+1); 
   a[n]=0; 
   b[0]=0; 
   scanf("%s",a); 
   for(i=0,k=0;i<n;i++) 
     { 
      tong=0; 
      for(j=0;b[j]!=0;j++) 
    if(a[i]==b[j])tong=1; 
      if(tong==0) 
    { 
     for(j=i+1,x=1;j<n;j++) 
       if(a[i]==a[j])x++; 
     if(x%2==1) 
       { 
        dan=a[i]; 
        y++; 
       } 
     if(y==2) 
       { 
        printf("Impossible\n\n"); 
        exit(0); 
       } 
     b[k]=a[i]; 
     b[k+1]=0; 
     k++; 
    } 
     } 
   for(i=0;i<n/2;i++) 
     { 
      if(dan!=0) 
    if(a[i]==dan) 
      { 
       ch=a[i]; 
       a[i]=a[i+1]; 
       a[i+1]=ch; 
       m++; 
      } 
      for(j=n-1-i;j>i;j--) 
    if(a[i]==a[j]) 
      { 
       break; 
      } 
      for(k=j;k<n-1-i;k++) 
    { 
 
     ch=a[k]; 
     a[k]=a[k+1]; 
     a[k+1]=ch; 
     m++; 
    } 
     } 
 
   printf("%s\n  %d\n\n",a,m); 
   getch(); 
} 


努力—前进—变老—退休—入土
2009-09-16 20:34
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:10 
字符串可以构成回文的条件:
长度偶数时:所有字符的个数必须是偶数
长度奇数时:一个字符的个数是奇数,其他字符的个数必须是偶数

2009-09-16 20:42
hwdwow
Rank: 2
等 级:论坛游民
帖 子:119
专家分:98
注 册:2009-3-21
收藏
得分:0 
沙发的思路似乎太简单了,不是最少交换次数吧
2009-09-16 20:43
快速回复:回文C语言小难题,盼各位帮忙,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved