鱼C论坛

 找回密码
 立即注册
查看: 4429|回复: 16

求助啊,谁能帮我写一个程序,这个我想了好几天都没有想明白

[复制链接]
发表于 2012-9-14 08:36:57 | 显示全部楼层 |阅读模式
8鱼币
这个问题我好几天都没有想明白了,希望各位鱼友帮我一下

问题:回文串

回文串就是从左往右读与从右往左读是一样的,判断输入的是不是回文串。。。

要求,先输入数字N,,判断N是否《=8000,然后输入长度为N的字符串,看字符串能不能变成回文串,能,输出回文串,不能输出impossible。。。

变化的过程是这样的,,只能将相邻的两个字母变化位置

最佳答案

查看完整内容

http://blog.csdn.net/programmer_editor/article/details/1898387
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-14 08:36:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 08:46:14 | 显示全部楼层
我的大体思路是这样的,希望鱼友用我这个思路编一个,如果思路不对请告诉我。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 08:46:45 | 显示全部楼层
楼主的帖子怎么样?赶紧回文串程序框架 1.        输入数字N, 2.        输入字符串s【N】 3.        判断N是否小于等于8000,是进行下一步 4.        判断N是否为奇数,是,进行下一步,否,进行第13步 5.        判断字符串中成对的个数是不是N-1)/2,是,进行下一步,否,输出impossible,结束 6.        找出单独的那个交换到中间 7.        交换后,找到第一个字母,并找到与之配对的字母,将与之配对的字母交换到最后一位 8.        检查单独的字母是否在中间,是,进行下一步,否,执行第5步 9.        找到第2位,将与之对应的字母放到N-1位 10.        执行第8步 11.        以此类推,直到第N-1)/2位 12.        输出字符串s【i】 13.        判断成对的个数是否为N/2个,是,进行下一步,否,输出impossible,结束 14.        进行第7步,第9步 15.        以此类推,直到第N/2位 16.        执行第12步 试试这里的快速回复给楼主点评论吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 08:48:08 | 显示全部楼层
回文串程序框架
1.        输入数字N,
2.        输入字符串s【N】
3.        判断N是否小于等于8000,是进行下一步
4.        判断N是否为奇数,是,进行下一步,否,进行第13步
5.        判断字符串中成对的个数是不是N-1)/2,是,进行下一步,否,输出impossible,结束
6.        找出单独的那个交换到中间
7.        交换后,找到第一个字母,并找到与之配对的字母,将与之配对的字母交换到最后一位
8.        检查单独的字母是否在中间,是,进行下一步,否,执行第5步
9.        找到第2位,将与之对应的字母放到N-1位
10.        执行第8步
11.        以此类推,直到第N-1)/2位
12.        输出字符串s【i】
13.        判断成对的个数是否为N/2个,是,进行下一步,否,输出impossible,结束
14.        进行第7步,第9步
15.        以此类推,直到第N/2位
16.        执行第12步
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-14 09:47:07 | 显示全部楼层
用什么实现?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-14 09:50:38 | 显示全部楼层


我应该在这个帖子回的!这个帖子有悬赏!哈哈哈~~~

  1. /*回文数*/
  2. #include<stdio.h>
  3. main()
  4. {
  5.         int a,tmp_a=0;
  6.         int shang;
  7.         printf("please a number:\n");
  8.         scanf("%d",&a);
  9.         shang=a;
  10.         while(shang)
  11.         {
  12.                 tmp_a=(tmp_a+shang%10)*10;
  13.                 shang/=10;

  14.         }
  15.         tmp_a/=10;
  16.         if(tmp_a==a)
  17.         {
  18.                 printf("%d  is \n",a);

  19.         }
  20.         else
  21.         {

  22.                 printf("%d  is not\n",a);
  23.         }
  24. }
复制代码
  1. /*判断是否为回文字符串*/
  2. #include<stdio.h>
  3. #include<stdio.h>
  4. #include<string.h>

  5. main()
  6. {
  7.         char a[1000]="";
  8.         char *p;
  9.         int i,k,flag;
  10.         

  11.         p=a;
  12.         printf("please input a string:\n");
  13.         scanf("%s",a);
  14.         
  15.         printf("%s\n",a);

  16.         
  17.         k=strlen(a);        
  18.         printf("k=%d",k);
  19.         for(i=0;i<k/2;i++)
  20.         {
  21.                 if(a[i]!=a[k-1-i])
  22.                 {
  23.                         flag=0;
  24.                         
  25.                         break;
  26.                 }
  27.                 flag=1;
  28.                
  29.         }
  30.         printf("flag=%d\n",flag);
  31.         printf("==========================\n");
  32.         if(flag==0)
  33.         {
  34.                 printf("%s  is not\n",a);
  35.         }
  36.         else
  37.         {
  38.                 printf("%s  is \n",a);
  39.         
  40.         }

  41.         printf("==========================\n");
  42. }
复制代码
希望对你有帮助!虽然不知道楼主在说什么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 09:53:33 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 09:56:25 | 显示全部楼层
伟伟while 发表于 2012-9-14 09:50
我应该在这个帖子回的!这个帖子有悬赏!哈哈哈~~~

希望对你有帮助!虽然不知道楼主在说什么

你的这个程序一个是回文数,还有一个是判断是不是回文串的,我要的是怎么把一个字符串怎么变成回文串,不过还是谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-14 10:10:26 | 显示全部楼层
那个思路应该可以实现
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-14 10:11:28 | 显示全部楼层
这个在 C专家编程 里面有,去查一下吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 10:16:02 | 显示全部楼层
wangyexin 发表于 2012-9-14 10:10
那个思路应该可以实现

怎么实现啊,我想了好几天都没有实现,能不能帮一下我
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 10:17:39 | 显示全部楼层
守夜人 发表于 2012-9-14 10:11
这个在 C专家编程 里面有,去查一下吧

能不能把连接给我??谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-14 10:18:09 | 显示全部楼层
不知道这个符合楼主要求不
  1. #include<iostream>
  2. #include<cstring>

  3. #define DEBUG

  4. using namespace std;

  5. int d[300];
  6. char s[8005];

  7. int main()
  8. {
  9.         int n;
  10.         while(cin>>n)
  11.         {
  12.                 if(n<=8000)break;
  13.                 cout<<"n大于8000,请重新输入!"<<endl;
  14.         }
  15.         cin>>s;
  16.         memset(d,0,sizeof(d));
  17.         for(int i=strlen(s)-1;i>=0;i--)
  18.         {
  19.                 d[s[i]]++;
  20.         }
  21.         int ans=0;
  22.         for(int i=0;i<300;i++)
  23.         {
  24.                 ans+=d[i]/2;
  25.         }
  26.          
  27.         if(n/2 == ans)
  28.         {
  29.                 cout<<"possible"<<endl;
  30.         }
  31.         else
  32.         {
  33.                 cout<<"impossible"<<endl;       
  34.         }
  35.     system("pause");
  36.    
  37.     return 0;

  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-14 10:33:51 | 显示全部楼层
wangyexin 发表于 2012-9-14 10:18
不知道这个符合楼主要求不

这个程序很好,给我一个思路,我先试一下这个哈,谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-15 09:52:31 | 显示全部楼层
copy下楼上的代码,先运行一下,再分析分析
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-9-15 16:35:08 | 显示全部楼层
仰望天上的光 发表于 2012-9-14 08:36
http://blog.csdn.net/programmer_editor/article/details/1898387

谢谢了啊,真的很好!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表