QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6501|回复: 12
打印 上一主题 下一主题

回文问题(用c++编写)

[复制链接]
字体大小: 正常 放大
lynnyan        

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
$ n8 g  k2 Y: n2 L' @" N( T4 o#include&lt;fstream&gt;1 y( f( F4 c& I( t  l
#include"string.h"" n& t$ E8 x9 M+ T
//#include"time.h"$ B. n& s. O. U& m+ d
using namespace std;
( z7 Y; o5 \; cifstream in("input.txt");
2 e7 y, ~# A- xofstream out("output.txt"); 8 l, J) n3 ?( a
class String + u% ~: a8 X1 H1 V( o8 n3 ^0 s+ Y
{8 V  z1 a. k" b' l
public:3 X/ X) b. B# ^8 S8 @3 L* ~0 u- R
String(char *s="");
0 b+ {6 D. K6 p4 g  | String(const String&amp; s);+ e5 Z( ^$ X; c- g( b' d; @
~String() {delete[] str; delete[] pre;}
$ k$ d, `! a; t( {0 w% ] String&amp; operator=(const String&amp; s);3 s6 z; \$ v4 i+ p- B, ?. @0 e; B
int length()const {return size-1;}
6 O7 p9 A) a2 B# | int get();; F9 _6 h0 D3 Y& l; e2 g
String&amp; change(int *p,int n);6 D( D" ^0 p: U  n9 x2 f4 v
void get(int *p);
/ Y' V6 M# H7 J9 H void display(){out&lt;&lt;str&lt;&lt;endl;}6 d# F  ?. U5 v; V
private:
- Q, Z3 E4 m$ G$ ?/ B char *str;
/ b/ G3 c; B  }5 l    int  *pre;
6 r$ F' z4 H" _- j! A2 E3 v int  size;
6 P5 L- F: E: ~3 j9 z- ^) K3 N& C};</P># _; O/ t# e! ~4 Y
<>String::String(char *s)
4 ?) n  o1 s! H1 d3 r+ J* i{
$ ]6 Q& U, U  ]8 U& C/ G& G! P size=strlen(s)+1;
' h4 \1 d5 m. @9 R  Q str=new char[size];
" K* I# k( Y/ h if(str==0)  throw "error";
0 b4 V7 n2 n3 [: Z3 S% d strcpy(str,s);" T2 e: N% d$ ]9 R; ?
pre=new int[size];
+ Z. l. j8 |2 T+ e" y  e if(pre==0)  throw "error";
7 @4 C( w9 b9 i* O}</P>
+ z$ j, f, [- R" I- {3 [1 w% C) t+ x<>String::String(const String&amp;s)& A3 s* b; x' ^4 l( O; l5 M2 Z
{
6 Z1 y/ T2 h; T- M# t2 p size=s.size;3 E, L0 ?$ Z  {2 a, a
str=new char[size];2 L# d- W, ]1 k" y, L9 p
if(str==0) throw "error";. p9 p; I9 }8 T! C7 ]
strcpy(str,s.str);
) T+ d1 J* V& M1 y& r0 ~0 Q. o. ` pre=new int[size];
6 H$ l9 d+ j7 ~/ ]- L- @ if(pre==0) throw "error";
9 X! @9 M  b$ z3 R7 M' r9 L}</P>( T0 s1 F% ^7 K8 i* j& ~
<>String&amp; String:perator=(const String&amp; s)
2 R/ K8 z( N: z- F  j* d/ L{
& f- u. f: F" v" a: I, W" [ if(s.size!=size), \/ \+ E" H$ S: G% P4 K5 V
{' Z" V3 R! r& w
  delete[] str;
9 k+ @% N# \; J8 b- V  str=new char[s.size];
5 V; g/ y, L2 ^" c3 ^  if(str==0)
* B/ `! l; Q% H; v   throw "error";8 I) u( S8 H3 ]0 s% ~( I) W
  size=s.size;
# F: U# I7 R4 T: M, g6 U" q8 W7 W/ v }2 L! g4 V0 K. d/ B7 E0 O
strcpy(str,s.str);1 I, v9 _+ r5 U2 b
return *this;
, o# d4 X/ D5 \4 g1 |2 N}</P>  v( b2 I) U/ U6 s
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串3 M3 ^; P! C# G& k0 c
{# s# M# y, n  O9 e0 s
int i;
+ ~  W2 \" Y$ O0 ?& }( S delete[] str;
$ j- [9 w* E0 ~+ E1 L str=new char[n+1];, M& Z+ Y) q/ u) x8 n
for(i=0;i&lt;n;i++)7 H$ J1 t: i% v$ d( K
  if(p&gt;=0&amp;&amp;p&lt;=9)9 @5 ]: N; t- E. p, C
   str=p+48;
# ~8 _4 B: L8 h2 U7 d" Z- }$ [  else
1 N1 I/ p; J7 F7 _+ U) _   switch(p)
( _. }) U8 W3 H3 K2 i: q3 \( h3 \   {
; _/ _% S' J  r: Q. q, F) m6 K       case 10: str='A'; break;% v1 x& f) Q7 Y( L# P2 C6 q
    case 11: str='B'; break;0 I  O- x% P! O6 y: C. u- e! K
    case 12: str='C'; break;  A( q6 t+ _) O
       case 13: str='D'; break;. ^3 ~- L" i7 T0 S% @
    case 14: str='E'; break;+ o$ A: j5 ?7 `9 s
    case 15: str='F'; break;
8 a3 t9 v5 m8 ^0 I* n   }
# k2 U( I% V3 K1 I. B  str[n]='\0';6 `( D+ t+ H, X3 _
  return *this;
: P/ P. J2 ^4 e% s}
6 [9 {$ G9 l+ i6 E) k3 Nint String::get()//输入一个字符串1 Z% j- P6 e& Q8 I
{+ B0 ]# e2 T. Q, m
char tmp[40000];% g2 Y- z7 T( S% B7 p
in&gt;&gt;tmp;
5 ?( ^+ B& k3 B% Z; ~" a* S) F3 e- \ delete[] str;
2 G% i" [4 T8 Q5 i% G/ O& U8 k: } size=strlen(tmp)+1;
. D8 H1 H) V2 L# F str=new char[size];2 B# s; T# x. V" \5 T7 c2 t2 C; F; y% M
if(str==0)
; Y: V$ n" n% y2 Y: s  throw "error";
! ]; Q0 S  i! {' s( H strcpy(str,tmp);' |9 e# ^8 g4 J8 s* t0 R$ G3 u
return size-1;" {- j2 ^" W% `+ z
}</P>
, B( K( _9 c# `<>void String::get(int *p)//将字符串改成整型数组/ p( i6 d( N: J: e
{
# n9 }2 _$ n+ J* V' P int i,j;
* x0 L4 y  r& N& c; q for(i=0,j=size-2;j&gt;=0;i++,j--)
  t  M+ U: t2 g$ Q# f  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')7 _( b) T; x8 R) v& m- [
      p=str[j]-48;  c" g7 E; N2 g: a; y6 {6 @  {
  else" n/ o& {! Z+ t$ `0 D) R
  {
# v! c3 P* [4 z   switch(str[j])
3 t& S. o. V) [7 z- u2 |   {  H( ~$ o# c/ @  m% ^7 b3 O
       case 'A': p=10; break;3 |- q: `9 t% r$ h  A( h
    case 'B': p=11; break;, R* ~5 x7 D$ j" _6 l: g$ Z
    case 'C': p=12; break;9 F9 N# P: g' q& \% E
       case 'D': p=13; break;4 U. w6 F7 }9 y- r9 H
    case 'E': p=14; break;
) s. G1 G: E+ i. _- \    case 'F': p=15; break;- k1 v" @5 e  Q  s
   }
7 J' o2 P; ?+ a% e+ z9 t3 j4 U  }
$ [8 U/ b, O3 k4 c}</P>
" R. v% ?5 D( M<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
* e# [! g" F( I4 [2 i{: n8 b6 U, Y! v
int i,j,a=0;
. b, q$ `. L- B$ W    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)) R4 V+ V. A2 y7 W! C( K* A4 N
{. G1 g5 r: q3 J4 H
     c=p+p[j]+a;2 R0 Z0 v3 e% r# m
  a=0;8 t8 }- Q$ r1 w
  if(c&gt;=k), A5 Z6 \5 q9 t" I! h9 B
  {; r0 q5 e# `- S. }
   a=c/k;4 z& n4 w& v& o8 f1 S( D  Q3 O
   c=c%k;
# m! K9 `7 l1 i* D' w  }
1 e" |' T3 i1 \+ ]& } } 9 T& P: r( L& l+ X1 P4 f2 U' j
if(a!=0)7 j1 X$ y6 H, Q. K2 R9 `8 W. z$ H
{
2 x. M" L$ a% N6 G! t- w  c=a;
5 z7 C& o3 a) z: o  m++;
4 F5 P1 s2 S& X- x }5 p7 L' Y  |% V! m! Y
}</P>: g5 d1 t7 A$ |  e
<>bool match(int *a,int n)//判断是否为回文数
% f3 K3 q1 t3 C4 W& j{
5 _4 P* k0 _+ x+ D int i,j,h=0;: E3 i) O% s5 a$ H  R" I: D  h0 X% @6 c
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
" e5 m5 X2 n; |, `. U8 g {
" I7 K" @* U8 J1 }- C3 [  if(a==a[j]). s1 d- U: S9 h
   continue;  t5 ]5 K2 z6 k: ?6 [; F7 e
        h=1;$ V+ t( t* @8 d# j
  break;6 `$ L: ~# `, S; Z( g0 m8 U5 K
}
* P; t9 f6 O  d; @( T! y if(h==0)
7 \0 O2 B8 |2 Y; j, W$ P  return true;
" L- [) A# h6 N& l# m% ~3 n/ Q else
  F# V1 \# x( C# C/ S6 W* H) {  return false;
$ ~1 j0 l' q9 L0 p5 r& {}* W1 m) M+ Q  J* b+ J
//clock_t start,finish;
$ P0 C" g, v- I  ?( H* Q- xint main()( a- U& G1 ^- W& G
{//start=clock();9 O! S4 }' y: y! ]/ L+ A) H1 B3 a
if(in.fail())7 {4 N! g7 z& e7 B! c% R2 ~
{
% }9 ]5 m$ M' y1 J$ T& `* o5 y  cout&lt;&lt;"the input.txt is not exist!";
1 W4 e) u  r0 i- W: i  exit(1);! m# u+ H3 c$ |
}/ `7 M( j5 i/ y- |
String s,s1;
5 F. U( F  D  ^( G4 U5 c0 r+ ~: a int n,g,k,*a,*c,m,h=0;/ K/ X* |$ [% g( I+ [6 f5 ?) v
    in&gt;&gt;k&gt;&gt;g; " K0 ?9 }# M+ u/ W. Z3 _  e$ [
    s.get();6 g8 r" |4 N2 ^

9 z& s# ^6 I0 M# H7 f8 r  b- O    n=s.length();
. ^0 `& |; c8 m m=n+g+1;
4 c, U/ c2 C8 r% ?& F a=new int[m];
, P, B0 D, a% I% E! i8 } c=new int[m];* c( {2 |0 U3 M0 b
s.get(a);
4 Y( S1 O; ~, ^  ?$ p5 M if(match(a,n))
7 b9 |/ y8 h+ o" M {2 @+ e- r2 l# M' g0 E
  out&lt;&lt;0&lt;&lt;endl;
2 |2 W( P& K5 ^+ u( b" y  s.display();
# f, Y0 {" C* ?0 e  return 1;, K" L: z0 w  |0 P# h7 c
}( M1 t; |2 T3 u/ g8 r5 g
do1 }0 w& k! W3 `$ t/ j& ^: q
{
' h) I. u. t2 t* o+ L; ?  k4 v     if(h%2==0)
' }$ O% D2 W( O+ s$ i9 N3 n3 g      add(a,n,c,k);+ e5 Z$ f) j+ J& X; N; i/ ]+ U3 M
  else
, @/ Q- g1 K. }  n, I3 G. d   add(c,n,a,k);% W0 l. E; t6 Q) z% N3 w
  h++;4 @7 G! O9 J' P# F
  if(h&gt;g)
3 Z: b% D8 l2 {   break;
! X/ p! J4 ^) j }
, r9 s3 s. N5 v, }2 F2 O while(!match(a,n)&amp;&amp;!match(c,n));8 t1 F2 s# }  J! M$ s/ ~
if(h&gt;g)0 H% O! l0 {+ s3 i5 f4 R6 A4 J
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
' {2 Q8 @# A+ H6 [ else4 d0 N/ _$ W6 ~
{2 ~% R3 T4 F" c0 J1 O
      out&lt;&lt;h&lt;&lt;endl;
5 I8 _4 U4 P% l- T     if(h%2==0)# Y0 e( R6 h" _% y
      s1.change(a,n);$ X' m( I4 r2 c" ]
     else
8 j/ E: H3 `* b7 |: Q0 T7 o3 Y8 B) y      s1.change(c,n);
" ^4 X4 Q1 L/ p$ x- ~     s1.display();, S6 r- Q9 J5 v. _: C6 R6 |, h# D
}+ `) \9 `- I: `  N0 m
delete[] a;
  {. P3 R- V/ i3 y delete[] c;
/ t" V3 e, w; |- t// finish=clock();9 s  D. i* w5 l1 _- I
// cout&lt;&lt;finish-start&lt;&lt;endl;) p! G, ^' E8 n; I; Y8 s" Z
return 1;
% A9 @/ Z5 ~% V7 |}</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
我相信今天的埋头苦读是明天的出人头地
txj66        

2

主题

2

听众

42

积分

升级  38.95%

该用户从未签到

新人进步奖

回复

使用道具 举报

zxl_lucky        

15

主题

2

听众

66

积分

小木屋

升级  64.21%

该用户从未签到

新人进步奖

回复

使用道具 举报

sabbanji        

0

主题

3

听众

21

积分

升级  16.84%

该用户从未签到

新人进步奖

  一个指针从头向尾走,一个指针从尾向头走,至多走到两个指针相遇或相错,就可以检查出是否为回文了。上面的代码怎么弄得这么复杂?
回复

使用道具 举报

darkghost        

0

主题

3

听众

22

积分

升级  17.89%

该用户从未签到

新人进步奖

我觉得用堆栈也可以实现吧,先将各元素压栈,然后将其中的元素复制到另外一个栈中,再出栈比较。<br/>呵呵,可能还要麻烦,没做过。。。<br/>
回复

使用道具 举报

mustpeter        

0

主题

3

听众

23

积分

升级  18.95%

该用户从未签到

新人进步奖

回复

使用道具 举报

zhuph        

0

主题

3

听众

21

积分

升级  16.84%

该用户从未签到

新人进步奖

回复

使用道具 举报

hero1632        

0

主题

0

听众

17

积分

升级  12.63%

该用户从未签到

新人进步奖

回复

使用道具 举报

friendfb        

0

主题

3

听众

21

积分

升级  16.84%

该用户从未签到

新人进步奖

<p>设计算法的时候,应该充分考虑时间效率和空间效率!但是两者往往也是互相矛盾的。一个好的算法可以应该权衡这两个方面;或者更加特定的需求来设计算法。</p><p>在我的记忆中,回文是需要考虑标点符号的吧</p><p></p>
回复

使用道具 举报

0

主题

3

听众

72

积分

升级  70.53%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-7-19 07:54 , Processed in 4.775916 second(s), 110 queries .

回顶部