QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;/ F  r% X4 q+ Q  x2 B1 M% t7 d
#include&lt;fstream&gt;
% C  O, K+ i- O) t, b& g9 D#include"string.h"! w0 v1 L+ n- _/ c- Z; V4 g4 |/ D
//#include"time.h"
7 l; _6 D+ M8 T1 c6 p$ K8 ^9 |; Ausing namespace std;
5 P) X; P, @3 ]  `; h! i7 r0 oifstream in("input.txt");% v- Z* D1 U8 t
ofstream out("output.txt"); : z& I5 G0 m- c) S5 E/ h. P
class String
: `" t2 R7 C, Z( G8 y{$ e; P! D6 u( e6 ~! y$ _  I7 q! D
public:
  I. z9 }* M6 O  j5 } String(char *s="");
, U# w6 Q: R1 [ String(const String&amp; s);7 q* F. G+ W* S, e0 y+ j
~String() {delete[] str; delete[] pre;}
: Y  b* h7 _% S/ U5 ]5 Q7 _ String&amp; operator=(const String&amp; s);
' u7 w. v5 W9 j9 n- y; U7 ?: m* k int length()const {return size-1;}: U0 L* G4 X, V; @
int get();$ _$ T0 Z- c! A$ P
String&amp; change(int *p,int n);
* Y+ ?2 Q- F. k" Y4 o4 ^ void get(int *p);
0 R7 ], y# w" ~0 I void display(){out&lt;&lt;str&lt;&lt;endl;}& x! e! u5 g. S, q
private:
: O0 n& `  v0 [: M1 l char *str;7 Y: n) _) M" @3 K
    int  *pre;
- P+ r2 P( a/ @+ @! { int  size;- P) K/ G- ^  q7 U8 }
};</P>
% }+ q4 Z( B& ?  h<>String::String(char *s)% U; c6 T8 Z( P( Z4 y* \
{
3 Y* z; c" V7 c) @ size=strlen(s)+1;
/ n0 b) m/ s6 l( {% M4 {* y- M3 D str=new char[size];* X3 K% I4 Q$ L3 x: Z
if(str==0)  throw "error";
: l5 m" o* w$ G$ X3 |$ ?$ [3 C strcpy(str,s);  x9 u& \: y; o+ y
pre=new int[size];
, y. u3 D$ R: K/ u5 M% l  b# H0 w* U* v if(pre==0)  throw "error";
$ n0 _6 `& O3 E' p# g6 B}</P>
7 w! U$ b  j6 S* ~' Q+ f6 q<>String::String(const String&amp;s)" w+ C9 {. c# v1 l
{" s9 `. ?, @% _+ s" Q
size=s.size;
' c: }# ~0 @' P; k5 o str=new char[size];
6 G0 N- x3 t4 Y- O# H5 t if(str==0) throw "error";
0 j% a# ?( E0 F; ? strcpy(str,s.str);' u/ u' r" V& @7 Y+ [
pre=new int[size];
9 O0 V7 ^6 V7 ]$ h  Z6 L if(pre==0) throw "error";9 y" |' J  f( v2 N1 `0 {6 \) j
}</P>
% c8 I1 l- f0 Z+ H8 J- z% W' g<>String&amp; String:perator=(const String&amp; s)  }% T, @+ ^6 L' L$ U5 f0 q
{3 l, [, I$ U4 v, P
if(s.size!=size)* y3 V, r& f( G) C: B1 h
{
& V" _/ C9 p! ^- o/ Q; i' h" k  delete[] str;1 C# y+ _( T$ {4 W8 Q5 `, c. C
  str=new char[s.size];9 F8 I' G+ P1 R8 \0 s
  if(str==0)
( w* I5 j8 g8 A) C& g# B   throw "error";
1 y8 c8 c! b8 `. R% R  size=s.size;
; G7 Q) Q# T1 S* Q% Z+ g }1 o3 A, O, e. n9 [* u
strcpy(str,s.str);
) C8 m& C# m4 r" p/ N return *this;( _$ O8 R) q, t" M
}</P>$ ]  o  U9 [8 r" n! Y
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串; X6 H& j6 J; D4 k  R
{1 s2 l! f" p, t% Z* ~! V  b
int i;
. b+ D- [7 r( W2 e* I6 L delete[] str;
# L" R# C' w5 T2 c; V str=new char[n+1];
5 S7 @& J# R& s/ o* B  {. n- o for(i=0;i&lt;n;i++)
( [4 e* t4 x3 O4 s9 O  if(p&gt;=0&amp;&amp;p&lt;=9)7 Y/ r& ^" y4 A
   str=p+48;1 q& V/ f7 }2 [' D# j
  else
, B+ @, @8 m! \. P" f) @1 j9 j   switch(p)& P$ C" B. @0 _/ u
   {% o8 \& S: g* N% l4 v
       case 10: str='A'; break;
+ y5 v0 e6 Q3 W4 i0 M+ r    case 11: str='B'; break;  K7 c$ _; M0 h  i& T
    case 12: str='C'; break;
" A- `/ k2 h3 @( G+ y       case 13: str='D'; break;
* p/ i0 M' k" I% k1 G2 R8 s    case 14: str='E'; break;* `$ t* I% O- y9 L0 _& K' A9 {
    case 15: str='F'; break;
2 w; t% s  r  S- W, a  _. Y   }+ e) o# [3 F/ _7 J, o! z. }
  str[n]='\0';& D+ R/ u0 z1 w
  return *this;- W2 {& z+ }) n8 w
}
; {: I% Y  `: N- k6 Bint String::get()//输入一个字符串
. K- }' b; q0 s  z; R) ^{8 {5 {0 a4 |% d
char tmp[40000];) A) T) w; _. R2 u' g
in&gt;&gt;tmp;" M- z% u3 |1 C5 w/ C
delete[] str;
. B* L. X& L" G+ j size=strlen(tmp)+1;9 I6 _" u6 b* v) y4 Y' c+ d8 h
str=new char[size];
$ W* n! H5 V. k% `. ~$ s if(str==0)
9 {/ G& I# G* M2 s' _, l8 c0 x- ~* s  throw "error";
; Y# ~/ P% [  A6 k strcpy(str,tmp);9 y5 M1 @) ]" ?8 N! P
return size-1;# }) N4 L- G+ d; K' v1 p+ X
}</P>
  h  j- O; A! Y  X<>void String::get(int *p)//将字符串改成整型数组( L* G# ?# `$ A3 Y; A
{  O' ~7 F* W3 G3 E; e
int i,j;2 c# D1 {4 q" l
for(i=0,j=size-2;j&gt;=0;i++,j--)
- r! J( a0 I; M1 z) O6 f  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
8 K) T: F4 M3 M8 w      p=str[j]-48;
' B& U; S( b% U" a9 b' Q, w  else" j  ]' Z* H4 d/ \4 _7 I% g" ~
  {! G: u; C2 `/ B1 d9 O$ x! ~. |& Z3 Z
   switch(str[j])
/ i+ N- ^$ u# H   {7 T( F& _! `3 z, f4 ?7 ^
       case 'A': p=10; break;
& g1 V. s- m; ~% m" [    case 'B': p=11; break;( f7 q! G3 V/ a
    case 'C': p=12; break;% s/ J% u" H0 P* e; |( L
       case 'D': p=13; break;9 G$ P/ x* N3 }- d
    case 'E': p=14; break;
/ V/ `5 _: _( \    case 'F': p=15; break;, n: _7 f7 G, E  u0 l/ [/ B3 {- D
   }
- ]. \8 c8 ]. P' _# q' c3 F' _( a% W  }3 v( j+ G. m9 {3 u% h
}</P>
  T8 m8 o' b/ A: L6 B5 S" [<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加1 K" k# z+ B: ?5 v; _( E9 A+ f5 w/ v
{" F# J+ ^+ L3 T! R" b5 x
int i,j,a=0;
5 Y# d6 q$ Y% E) ]/ z1 k- [. q    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
" q; _  I8 K) S {
: s( p- L- @6 U# p     c=p+p[j]+a;
  e8 i% `/ R- }! ]. O3 y  a=0;
3 I* T1 X/ n$ g5 u+ U9 G! {/ ]# _  if(c&gt;=k)# B+ Y0 d9 g$ G' Q
  {2 j5 \8 l( t* T2 o3 \
   a=c/k;: X# B! V- Q/ k" X9 h0 a
   c=c%k;! X$ n+ x3 B6 G1 d! K% W9 ~
  }
: Z3 g) a# a" W* ? }
4 H2 {" J8 Y' q1 m6 P2 \2 b3 J if(a!=0)$ b- n  V: z* o7 _) v6 H  `, M8 J% i
{, C: v* a: e- f$ |1 f9 k* T. v
  c=a;
( ~# B; p; l( e- O4 {  a  m++;
) W5 z& X/ l5 \4 j) M- r }* ]- Z! Y4 M( K! Q# c! y
}</P>
4 }8 t/ @5 v. N  A<>bool match(int *a,int n)//判断是否为回文数: ^& ^1 b& \. W4 `) Z" h  z
{
$ q7 h8 ^! B: l) k int i,j,h=0;
6 W, q' |  u* _+ Q for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
& H5 j- o7 R8 K1 W9 V3 B' k {/ d& h, v( v# ~, I6 {7 _4 F
  if(a==a[j])* U2 W( a9 R( Y8 t0 d
   continue;
! k6 K9 c$ o' y2 Y        h=1;" `4 i) u2 l( A- W) ^1 l# j( k" x
  break;5 L+ b$ A) Z8 o; a+ ^( G
}
+ [* `' b- r( j1 v9 | if(h==0)
! y8 w$ ^; f; i; ]  return true;' J* n# G0 w$ }* h/ C. J
else
$ `+ s4 o8 G/ d7 b' S7 h3 e  return false;! D) t4 T- K" M& r
}
, d) a% {9 L0 P; `+ i/ i//clock_t start,finish;' M* m5 e; a# u4 x
int main()6 R: d& U+ N. c: j6 J- e# P# ?
{//start=clock();8 ~! n+ Q' s5 M9 \/ h
if(in.fail())
2 V4 h) N& S) G {/ b, c+ g8 y: u0 {! S
  cout&lt;&lt;"the input.txt is not exist!";( q. L& \$ g- N/ g: v% i7 }
  exit(1);4 `8 z3 M# O& o/ |3 x0 N
}
2 Q$ W( S1 B* U$ \9 s String s,s1;5 D7 H, l" g8 p9 Q7 ^
int n,g,k,*a,*c,m,h=0;6 P! r) M' c2 r! L( a" j. a
    in&gt;&gt;k&gt;&gt;g; 9 ?( K9 u" |! ]. m9 c3 g
    s.get();, S2 t9 E( W3 b7 A

9 s* ^: t4 L9 X! T* B9 N. e' s    n=s.length();, Z% U. N5 f1 l1 b5 `0 v
m=n+g+1;
! i! P6 |6 m+ P2 }9 o; ` a=new int[m];, U2 G) \& A" I# G9 k3 D
c=new int[m];, D  ^$ @) ^1 w2 z) R
s.get(a);
7 R  c% A* |5 I$ l3 v( K if(match(a,n))5 U( S2 d" N# `( ^8 |
{( r; H% c2 M' P7 l! m# b9 W
  out&lt;&lt;0&lt;&lt;endl;2 d. x; t7 x) M0 u0 ~
  s.display();- C) A' Q5 Y. _7 w* b! L* N
  return 1;  ~* m. `5 [, w! t. m2 v
}
* p& p+ {- o  X! K do
" S9 x. `' I4 f {
& W3 Z5 o7 a& a0 ~     if(h%2==0)
; i+ ?2 U: P" Y& W5 y, g1 ]( L      add(a,n,c,k);
8 S5 W* G$ e/ I  else% O- e3 r+ b5 M" U: W
   add(c,n,a,k);
, V$ @6 n; t  D* P. W  h++;
5 [1 z0 J8 i  R  if(h&gt;g)0 d" T9 S7 v$ j- x5 N2 o" `
   break;
! \( I1 J: [& F/ `. I1 C }  E( z( o( F& k6 a% }' [
while(!match(a,n)&amp;&amp;!match(c,n));; p; J, G; V6 z/ ?& p% i: D
if(h&gt;g), M( n/ @" Z+ c/ s; o
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
* S( m) G. O1 u0 M) \6 ?, g else9 Y  f' D& E: U
{
* }. o; J8 t' Z" a* F      out&lt;&lt;h&lt;&lt;endl;
7 \3 s* ^1 ~; h0 y" I7 U     if(h%2==0)' B$ M( Q- V; w! P; o
      s1.change(a,n);6 J1 P, H; b# E8 ~8 C/ S" a% Z' S6 U' b
     else0 d4 k) {! B: S  L' H
      s1.change(c,n);+ Y: L' ~5 u5 L6 k1 H$ \. g4 ^; H2 }
     s1.display();+ C+ ?5 h1 [$ V( r4 T! Y
}. R. F% s& y2 Q; t) R5 S7 x: F
delete[] a;
4 v. E7 y) _) G  W' w delete[] c;
' Q4 M. f8 p4 h" m0 e8 M! G0 T// finish=clock();# D/ W3 \7 e' D! {$ L) t
// cout&lt;&lt;finish-start&lt;&lt;endl;
/ [4 x; X" G1 x% y- w, H9 ~6 R return 1;
! z/ c( V% f! a, I2 E}</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-4-17 15:27 , Processed in 1.847091 second(s), 110 queries .

回顶部