QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;; l1 f. Y+ S9 e+ C1 M
#include&lt;fstream&gt;
! P7 p7 v. D$ N0 x9 {) |9 M#include"string.h"
$ \4 h3 o% A6 }//#include"time.h": e' M- P- @8 ?, g/ n: _
using namespace std;
2 z& y* v4 C' `' O1 B# Sifstream in("input.txt");* d1 t, Q+ U0 e
ofstream out("output.txt");
+ D6 a! W; u& a( i/ }+ ~class String
; H' k8 g# z7 L5 _2 w- Y{9 H- @2 Z7 j# L# @
public:6 f2 V' b) Y* R0 n4 {5 y
String(char *s="");- x% A# @3 X, h- A1 e  ?
String(const String&amp; s);
0 Z; K* J* ?+ G4 C) _/ ? ~String() {delete[] str; delete[] pre;}9 `$ w, J* k* K; W* C+ w- [
String&amp; operator=(const String&amp; s);
+ o) u  d+ y; T$ H5 Y: T int length()const {return size-1;}
+ j; H# w- y$ d8 Q8 R; R2 t int get();! T3 {) ?. a; \5 I
String&amp; change(int *p,int n);
% r) m' V/ y) U6 i  w void get(int *p);( k, P& a4 v) F
void display(){out&lt;&lt;str&lt;&lt;endl;}
; L$ ?7 T( P* O. j9 g( Tprivate:
% U3 _+ m% o: Y& g8 f  M; f; Z4 e% ?( Z char *str;
" H" L. t8 e2 U8 U! G8 R    int  *pre;
% w1 S: G6 w: g3 } int  size;3 M; S( x( W( N$ k! e
};</P>4 J  K, x1 y  M6 m
<>String::String(char *s)2 W/ F% F9 j/ ~; b+ e7 y
{! m9 S6 K! `) B- E) R! F% B8 }
size=strlen(s)+1;
$ _( L1 ^) K7 s str=new char[size];
+ m; S) P& o  [8 z5 I if(str==0)  throw "error";* e; m6 V' L7 t
strcpy(str,s);
  |+ `2 w# u; ?* q1 F6 ? pre=new int[size];
0 M. U4 [/ E- c5 }! [ if(pre==0)  throw "error";+ W' T# i/ R7 K; P8 @+ Y8 p9 t( ?
}</P>
$ s3 ^2 D% R; C3 M$ p, b4 h- t<>String::String(const String&amp;s)
  `. A* l/ @" m; ^7 H# S' D' n{
  n5 ^6 b4 M6 @ size=s.size;
# k: J( H. K; }6 d( a4 M1 \ str=new char[size];3 o' C  }1 A9 T/ M$ j
if(str==0) throw "error";3 Q8 [$ r  i8 k! E
strcpy(str,s.str);
! o+ j+ z# T. y! ~- {7 j% f! Y  X pre=new int[size];
% ~& y0 c) P6 k: c if(pre==0) throw "error";0 a: }% t. _1 }1 k( v) ^
}</P>
# s+ a$ i( N5 b4 Y" x4 [) ~<>String&amp; String:perator=(const String&amp; s)% @8 A5 n5 P- a% r& N, w
{
. |! m9 U& c5 ~ if(s.size!=size)
! T4 u' f4 ]- j  L( v' b9 l5 l {
- o9 z! {+ ?3 M1 W8 S+ J  delete[] str;( D9 p( S( X* x4 k- N" p
  str=new char[s.size];
2 @# y" Q& }- q; Y  if(str==0)
8 e7 E6 v, S! N9 C3 Y% O   throw "error";
4 s7 d- c) n1 X9 `  size=s.size;, L! B- [% H/ X% r9 q2 C+ x
}1 p" q0 m  f# ^6 `9 f! v
strcpy(str,s.str);, b' q0 Y# D1 J, i9 z& |9 m; P
return *this;) _2 q# o# ~+ P1 Z$ E: N) L
}</P>
$ Z4 G# N' t* z<>String&amp; String::change(int *p,int n)//将整型数组改成字符串+ F4 x4 B6 ~( _9 J
{  P6 S* a2 D1 j$ i  n
int i;
  y$ I6 J1 p8 X3 B! o delete[] str;$ Q: W- s: I( X7 r  j; K% e3 z6 X
str=new char[n+1];7 A4 d6 d: P$ {. S5 a0 E* |2 R
for(i=0;i&lt;n;i++)4 L3 ]% v6 s5 \
  if(p&gt;=0&amp;&amp;p&lt;=9)3 X& ]; ]: e' b
   str=p+48;
6 N( s9 }( A$ b- Q6 x+ P  else. d, |7 d6 S7 U9 M# `
   switch(p)2 z0 @* `4 _0 y
   {
& V' B" j! I( F- Y       case 10: str='A'; break;. y0 V8 C5 v- u! g
    case 11: str='B'; break;
- {% g/ F7 ]* K2 ~  i& E    case 12: str='C'; break;+ T* a+ Y6 o$ E5 w5 \9 Y5 g
       case 13: str='D'; break;
8 S2 Z5 ]. c/ X3 H, p- F    case 14: str='E'; break;
9 @8 ~0 v& w, U4 z, g( l) O, f" }    case 15: str='F'; break;' k/ j& C+ G  }0 y! O3 v9 E, H
   }6 {; F' V# @4 n6 c+ a0 ~( ]
  str[n]='\0';5 s/ m' I. e3 T, y
  return *this;" W% S( g9 E3 e5 ?4 r
}
) Q$ b% V7 _) v# `6 G+ Aint String::get()//输入一个字符串; O; w9 ]; t7 z; O/ w% i! P2 @5 M
{
) [3 U* W1 A- Q# V3 _1 F: ]5 K6 J char tmp[40000];" |3 Y% B9 |6 l! m! S
in&gt;&gt;tmp;
5 _' x$ b& ?9 U% f  V delete[] str;
3 u$ Z6 a" O2 o' } size=strlen(tmp)+1;
2 \6 r" s. _& c; i str=new char[size];
+ T1 K/ q* w% t" i1 u. }  ^; f if(str==0)8 z2 z, V% ~7 \2 h& Z* k
  throw "error";
6 \4 u3 T: d, X strcpy(str,tmp);" Q  x; j) V7 }3 r. M: Y4 j
return size-1;+ k* L/ a$ Z$ @4 y/ _2 Y
}</P>0 x& n: J( j+ |8 b% z) ?
<>void String::get(int *p)//将字符串改成整型数组7 u+ H) A% i% {
{
4 [- G8 n* X8 W( q# e+ T int i,j;
/ y+ s  g8 e9 H( U! n for(i=0,j=size-2;j&gt;=0;i++,j--)
2 E" h% i& ^0 x9 H! W  `  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
* O1 s( @( J: Z6 O8 j1 U7 k      p=str[j]-48;+ l  m- |$ z$ _" U5 h
  else
' B! _  M" K0 a& I. q) I  {8 r  b, g9 Y* _; G
   switch(str[j])
9 k6 \+ {  i+ n6 j. v3 {/ k   {
) \, d. D% t% y7 A( y       case 'A': p=10; break;: w: I% N) A2 v- o0 z+ X1 ]% Q& R
    case 'B': p=11; break;$ E1 C, B  M/ X) Z
    case 'C': p=12; break;
+ w/ ]% D' I: C7 ^8 s2 A1 b! l       case 'D': p=13; break;) _0 S. _- E% P: D% X4 j
    case 'E': p=14; break;
0 _* D1 \- R6 c" G& p    case 'F': p=15; break;$ k' b( {0 O$ a/ u
   }& d: F3 p8 R3 o4 b) P
  }
" V# F+ h) |: R  q* ?}</P>3 D* h$ @/ f  ^+ U! b4 ?4 V
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加1 J! q$ m; ^/ K/ P. f* S! `
{
* k' T9 F) j$ Y, ~ int i,j,a=0;
/ O* s9 F: H" q    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)2 n, W. ^- A% i
{7 `# |5 A- t2 c( v' v# h  }5 i
     c=p+p[j]+a;5 w+ A; p# g- k9 l4 Y9 \/ }
  a=0;
3 u# {; z; j& I  if(c&gt;=k)
0 J8 o! T  W2 f& Q4 ]  {
0 r8 b5 x( J" a" S  L( R   a=c/k;
, G& Q/ f0 O, J5 ?   c=c%k;$ H, s5 L. x, W$ v& c) i( f
  }
1 L% U6 v3 [1 T* a  c8 \" X! k } # }* x% I3 B2 n9 R( g
if(a!=0)6 U- X' \* Z3 v, `; y
{
, e3 l! e9 s+ s  c=a;
  c5 ?* r" H/ {0 J4 m  m++;1 k8 {0 K7 K! B) h' T
}
9 u: t. o5 I4 m  k" j* k7 k% S}</P>
$ w* R. _6 ?2 ]$ E0 m" n8 s0 X9 s<>bool match(int *a,int n)//判断是否为回文数
0 l! x4 X8 i# i- o& Z" o2 T{
. `) Q$ k- X; l9 l. R7 b int i,j,h=0;4 M. t# B5 a  p3 I! ^5 G7 m
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
# n' F9 A" B: P/ b, X, |( Y7 _ {# F3 h0 D& \: F0 T3 p
  if(a==a[j])
% m* e- P! M0 ^  e2 x' t+ E- N/ G3 w/ F   continue;
4 F: L8 i! v1 l        h=1;2 u& Q! F  [: r9 I
  break;2 y: B$ v; v7 \% T9 E9 ]4 h
}+ h! `' y( W# `# S% a! J  @
if(h==0)
2 [3 q5 Q* k  E) Q& j- d. ]  return true;8 g! C' r: U( ^2 X
else ' k+ k) |, t4 G& f# l( Z% h
  return false;
6 c* y- v3 ^; y; s; _8 x}
/ h, a% }1 s* c$ V6 e8 |//clock_t start,finish;
1 ~# E2 m  K! |* O& B- dint main()
/ X% q" x; D- R' n; N{//start=clock();( k" p! }/ y, }. r# v6 {5 ]0 ~( ?
if(in.fail())
1 d# C% V& ^4 B' F  L* u {. z$ ]. `* R% f7 N& k- n) W- b0 y
  cout&lt;&lt;"the input.txt is not exist!";( A* V. {8 l! P
  exit(1);1 ~8 A% q( `) g% B
}; k" C  ]1 }) P4 ]
String s,s1;* L  e* E7 N5 L* a* n
int n,g,k,*a,*c,m,h=0;
1 Y' ~9 O3 [7 g4 G" d" i7 \. h    in&gt;&gt;k&gt;&gt;g;
& W; L2 K  x! C- _7 N9 ?& N    s.get();
8 ]  B/ w: M3 E6 g8 r, [0 h$ R$ L8 e1 ~
3 }% S# q/ [  g    n=s.length();
; k* y3 ~& M! f4 g+ L0 a m=n+g+1;
. ?2 U/ R6 F4 ^ a=new int[m];$ Z3 E  T, l! Y1 @% P6 x, q
c=new int[m];' m8 b) C: j/ f( X( L% z0 F
s.get(a);
( x1 Z4 }* R$ a6 j0 j. m9 g if(match(a,n))/ e2 S9 X  N9 C/ Z3 D
{4 ~0 l4 ^0 B- x. C6 a
  out&lt;&lt;0&lt;&lt;endl;
$ e# ~$ q; ]; c6 k  s.display();' A! Q3 a2 W' S7 A  F8 h9 f
  return 1;
( U) M$ l3 f* m }; U1 L6 H1 z* _: P7 i; f' S7 m# m
do
3 j9 ~- f0 v6 ^6 V4 h  q {
/ \: a) f9 x0 y     if(h%2==0)
: g. I% E) C  o7 J7 g      add(a,n,c,k);
$ u) `8 I2 y$ J, E  else
' h  m7 u0 b: {: o6 [   add(c,n,a,k);4 D  f. ~- G4 r% U+ U' x% z1 D
  h++;
( S* Z' \% ^8 ]  if(h&gt;g)4 E! c1 \# B- ~3 o( a6 T. D. {
   break;, R2 V7 E) w) e( s* f- G5 L% {
}9 V: P, K/ _( N2 h8 Y' z
while(!match(a,n)&amp;&amp;!match(c,n));, g2 X. N$ O/ |: r( {
if(h&gt;g)( _, W5 l: ], |% |
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
8 S; q1 c% ?4 j1 p7 b else
( _$ x( y; v3 j$ U1 Z9 G {
3 O- i) j. u5 v$ @- F7 K3 J" |! V' K      out&lt;&lt;h&lt;&lt;endl;$ J1 h( r9 z: [! j! S6 b/ V
     if(h%2==0)
8 C3 W5 g; `5 w2 `4 b      s1.change(a,n);5 a6 o9 V1 V" q( ~' p9 v
     else
8 }) p: I' b" E      s1.change(c,n);6 Z% h5 B. a5 E! M
     s1.display();
) {! M3 \' M, X/ Z, F }
1 y4 S! K  o$ M" n delete[] a;
" d. M% P' q6 @3 \( X7 z5 _9 l delete[] c;
) Q3 ^# C: I  J% @7 y// finish=clock();
& {) {, C- K0 a4 o// cout&lt;&lt;finish-start&lt;&lt;endl;  A* }  x0 m# V: g+ I) `# s
return 1;
( ?! Z0 M# j8 L}</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-19 15:06 , Processed in 0.539460 second(s), 109 queries .

回顶部