QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;  w0 J" u3 `7 v8 C
#include&lt;fstream&gt;
% p6 h; |* B+ _( K$ h1 b0 k#include"string.h"8 a) ~" t" I6 T- X# g2 M
//#include"time.h"
+ K, t" B$ O$ u6 X5 }8 Iusing namespace std;1 o# }5 \$ M1 M" m
ifstream in("input.txt");
8 ]" C0 f- `: h. x% qofstream out("output.txt"); 1 R5 w$ N" N" E, a; Q' r4 G
class String
4 z, s: c$ J# u: g6 o7 c{
8 W8 M, L/ x; {1 \public:1 }& r) t4 G$ N1 H: N, J& f# B
String(char *s="");  R. L! P! Y, w0 R" y6 ?
String(const String&amp; s);
$ O5 _1 U+ r2 o2 ^5 z; |  `2 ^ ~String() {delete[] str; delete[] pre;}
6 o1 b  [7 Y) i$ | String&amp; operator=(const String&amp; s);
# [5 e0 N( j0 l. j! G int length()const {return size-1;}
/ k8 p8 h9 \/ J8 B  m  j int get();' ~$ `5 V# P! D1 v3 g1 s7 d5 j; S
String&amp; change(int *p,int n);3 }" V# Y$ |' I: j1 x* U& c" z
void get(int *p);9 A# ~* Z" M/ V0 L* r0 S1 g
void display(){out&lt;&lt;str&lt;&lt;endl;}0 I9 ?. G: q$ O8 i
private:
7 j3 V0 W6 j5 U! D  t char *str;. e. v$ d: H) F  r5 U, ]! C: l
    int  *pre;% m3 L! K4 \/ L' c  h9 v
int  size;& L8 _4 I5 l; Z: J( l  w! a! a
};</P>+ {" N7 M5 O3 P, J* \6 E
<>String::String(char *s)  \& i+ b3 s. c: D- t
{9 n* A& X% R, L$ L+ |( L3 R: r
size=strlen(s)+1;2 n% A% p$ A1 S& |% s
str=new char[size];0 S  m& N$ l) r$ J
if(str==0)  throw "error";
& @+ s6 M/ s/ `; Q" q strcpy(str,s);
/ ]$ M/ |1 G: g8 l( N pre=new int[size];, R( r, E5 |. H, _! N  P
if(pre==0)  throw "error";
+ d* U. a# p) k! l3 G! G}</P>7 S* f2 ~8 F/ }# B% ~2 O- b  \4 \: I! s  m
<>String::String(const String&amp;s)* ?9 M) I( U9 Z0 I0 N- q! q
{+ K" C# H8 o0 d! K
size=s.size;# l9 M7 Y5 {/ ]
str=new char[size];% d# B, l8 f$ |. t+ v; m: t5 W
if(str==0) throw "error";/ p0 a1 Q/ e: t' k& H: n* D7 z
strcpy(str,s.str);
3 c5 X. u9 A2 w: w pre=new int[size];
4 p9 J" a& Z7 V: A, F+ x0 T if(pre==0) throw "error";1 d/ @/ J) }# R( n. d$ M0 \
}</P>5 s* R5 m5 X" \1 V- _' m) r
<>String&amp; String:perator=(const String&amp; s)  A' w9 \- M6 Z- g
{
$ ~3 X% k7 j6 v* y- r; B9 a if(s.size!=size)6 K2 g0 {4 A, |1 S
{/ i. ~! Q- Q  m
  delete[] str;8 X* b' l4 J  m$ r# E7 w) P
  str=new char[s.size];
! J( p  C: M; @; B- _  if(str==0)
3 l; g! I$ _( N5 W* G3 K" a+ j& @   throw "error";
2 n; G8 T, g. i  size=s.size;. q0 N2 V$ A' o, ?0 [6 `
}
4 t& S$ T9 ^, E! s; y- z/ F strcpy(str,s.str);
1 ], X2 C( v3 F% {- L! E0 S; y7 y3 a! u return *this;" M5 r# E  I' |4 a: o; Z
}</P>
  a7 _1 K6 Y  k% z$ \<>String&amp; String::change(int *p,int n)//将整型数组改成字符串
0 S4 M) z$ l  u1 \{
+ o5 T1 ^8 F3 s% X8 o int i;( c, `$ [: w! H: u. @
delete[] str;) ^# b' l; a1 U4 n
str=new char[n+1];& R5 H: p1 r" t; z8 q
for(i=0;i&lt;n;i++)
, u$ f( t" f" s0 t3 D( [/ Q$ Q  if(p&gt;=0&amp;&amp;p&lt;=9)
# \% {  N2 R7 ~- R! d  n1 R   str=p+48;& ~. x, s' v& }' T, A
  else
6 N& {5 A2 i" }- D6 b   switch(p)
1 N) C# v5 j2 t: Q) x; e+ @2 Q   {. g) o3 Y3 C9 e8 Q+ g
       case 10: str='A'; break;
8 P8 ~* r( }; I8 }3 F$ j+ V    case 11: str='B'; break;
" H( E  x( ^9 }: @. p- t9 v  B    case 12: str='C'; break;5 [2 S/ T- R5 l/ f! J
       case 13: str='D'; break;4 u* ^0 S' R+ c0 ^
    case 14: str='E'; break;% L- q9 L2 W6 r% ~
    case 15: str='F'; break;
- m! Z9 X  |2 R1 O0 [   }
# ~& N& T7 q6 _- y0 C3 M  str[n]='\0';
6 S. Y7 d" {! |' ?  return *this;
  H" \8 j- c: `5 S}
! U9 G- K+ \+ V" G2 wint String::get()//输入一个字符串
; ]5 ~! W' U6 w4 u# m; m" I0 ?{
4 p/ ^# q! m/ X* V2 U3 Q3 l char tmp[40000];% g3 K: J; ^: h: _5 J+ m
in&gt;&gt;tmp;& a( K/ e7 k. p7 p* M
delete[] str;7 k. K* `( t5 @  J. h5 N7 P6 p8 Q- O
size=strlen(tmp)+1;
$ L' `9 y* R& n/ a! Y' r str=new char[size];% V( j  T, t5 O! T
if(str==0)
  P: _' ^6 F& Y4 M. `$ ^/ o8 M( ]  throw "error";& X5 ^) q& U7 P5 }$ g" w
strcpy(str,tmp);
0 \% p- U3 Y% q2 ^3 q# G return size-1;2 H2 E- U, d: |2 G. j
}</P>
5 v' f: t: B/ B7 M8 }<>void String::get(int *p)//将字符串改成整型数组
& g& [8 \+ j% @3 y- p, S{* d" K3 R0 b3 N7 v
int i,j;* m3 e. s& l- G9 B- ]4 Y
for(i=0,j=size-2;j&gt;=0;i++,j--)2 e* t# s; \+ ^2 i! k
  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
, E" Z0 u; f4 I6 |- X      p=str[j]-48;6 D: J7 w/ w3 f0 b/ @& U& }* ^
  else! Z4 Y" j$ d) W! y& Z  W
  {5 v8 Z# w+ z5 }0 P
   switch(str[j])$ `- q9 W! r* k' v3 r# B
   {
, ^3 E, t  K9 a- J( q; \! k- @       case 'A': p=10; break;
1 D7 g6 ^4 D, `0 {. Q7 R  K) z    case 'B': p=11; break;
- t9 {3 V% ?* P! W( B% N* b    case 'C': p=12; break;
2 E  t7 z& \2 G       case 'D': p=13; break;4 `. b- v: ~0 W  A' z
    case 'E': p=14; break;$ r" X$ o- M3 H/ @
    case 'F': p=15; break;! n2 h2 Q  E# j& _$ T
   }/ @, @( C9 ^2 x/ A& _! V* h3 B
  }9 X) c$ i! M4 T' y, S- Z
}</P>4 W& z( N9 w! M8 B
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
+ `4 j" z3 F5 D6 x' G8 Y) D% X5 I{5 s1 l2 k9 x* k8 c5 @
int i,j,a=0;7 ~% e2 E' S  {" t
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
6 m* q. i9 c) f/ n/ \ {
! q5 p9 W; ?. z9 t. \- Z     c=p+p[j]+a;
/ h$ ~) c; C7 W  E% ]% T  a=0;
+ p* P) s2 g/ o1 G) o9 i! I  if(c&gt;=k)& |- V$ _& J# x( Q  S$ k/ j
  {5 p9 M9 S& e9 T  _- {. Y
   a=c/k;
" g4 V2 i& H8 v   c=c%k;- x# Y2 J- C2 R" Q. g, L1 K8 a* r& z
  }- `+ P  h; {$ A
}
% j3 Q0 Z- i' |0 m if(a!=0)
: M  T$ F$ Y' ]- Q; G4 B) }" Z {. ?5 j5 X9 a) ]; A) F, G: S" g
  c=a;$ L3 U# R7 Q2 y( L+ l$ m
  m++;
3 J9 H8 B/ d# e; R5 v0 T }0 e; f* h9 h8 z3 I0 ]. h
}</P>
* x6 |/ k/ Z: ^, K1 x( J3 E<>bool match(int *a,int n)//判断是否为回文数, ?0 W2 \- O+ c  T
{$ k2 H& O: u5 o8 p! l
int i,j,h=0;( A/ r& a6 ?* W: O  _$ W  n+ p
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)! e, }: T4 K, y
{
# Z1 |1 J, o  [7 J- ?; i  if(a==a[j])+ a% k& d3 A7 ^8 y+ a0 C! S
   continue;+ ^) o" w5 _/ ^6 J0 J& T
        h=1;$ W* \# F0 d0 f9 p. }
  break;/ b+ b4 F1 _/ W* A' w) h
}8 O6 J+ H  R  K7 }) [3 ^" m
if(h==0)
9 e9 }$ Z3 d2 x: g5 Z6 u, r  return true;
# @: }4 d+ |: o3 I5 m$ h0 | else ' u0 O% f! @4 t' P4 d4 l1 {
  return false;
" z/ a- g  [/ c  e- z}1 w; b7 Z$ `" E& v
//clock_t start,finish;
. b1 u. a+ T. ^/ X1 q# \1 kint main()
% r/ d( v) q8 j1 H* G{//start=clock();
9 e7 I1 T" k$ m+ ?: K9 H; ` if(in.fail())
4 S, |* D3 k, V/ w4 z2 z {5 {  ]) ?) t8 q- b1 F3 N; g
  cout&lt;&lt;"the input.txt is not exist!";6 G- P' X- c" a$ o
  exit(1);
4 i: x- d7 z7 |. G }
! l- M$ y9 H7 q  M  s" a String s,s1;
2 p: C- a4 N0 a3 O2 H9 B. } int n,g,k,*a,*c,m,h=0;
6 P( e4 u3 x+ J0 u. P7 e    in&gt;&gt;k&gt;&gt;g; ) z9 [; B# i" w3 o: I0 ~" G
    s.get();
7 P% b! y1 Y4 m( `) |( Y# ~( Y& g0 ~
2 A% [; s5 I) O/ ?5 K% a0 Z. r7 i    n=s.length();
( a) [+ I$ q4 t5 G  ^2 ` m=n+g+1;
0 c1 {. x0 ^+ c a=new int[m];
3 o. e' j5 ]: x5 f" k2 n( J" ~/ Y c=new int[m];
- u2 Q9 P2 p$ g/ \- E( t* p s.get(a);. o' \3 v& p) u+ \+ R
if(match(a,n))
8 ]. A' q; H* e4 l- \ {
3 d* a, ]& m' `& ?! y8 U- b  out&lt;&lt;0&lt;&lt;endl;0 Y# o& L" ]7 @
  s.display();2 N& V0 T& q! B1 P/ ^7 R; f
  return 1;5 p8 b5 B1 J$ [1 H  S
}6 i/ b2 M0 z" s( }: b
do
- o$ ~1 O; z2 \# B. Y$ u, k: o {
: a2 b# q( p' L! i     if(h%2==0)
4 ?) q8 A" M& T# I) ~      add(a,n,c,k);
1 J, U7 m: E, d6 @( u; z8 D+ }# ?  else
; i5 u) W7 P% |! f   add(c,n,a,k);
3 N1 |, j, {- d) v/ |  h++;
; {- q: Z6 I( O9 {  H& d  if(h&gt;g)
6 A1 W$ ^6 W" f( F3 ]5 M   break;
# r' L: S$ F# ] }
. j" j% ?0 u% \8 O& D( o6 U* L( i5 @ while(!match(a,n)&amp;&amp;!match(c,n));
4 L6 I8 N1 j4 z: V6 A if(h&gt;g)! Y+ U/ u/ F7 v% S' e9 _7 ~5 V% V
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
5 q' i& T3 U) q8 |; c* w; L else  T$ F9 O  G0 A" s8 i
{
1 S. F: Q4 j2 s" h3 t      out&lt;&lt;h&lt;&lt;endl;
! b* k' W% P3 U; J& R5 a     if(h%2==0)2 @$ N2 G7 ~& g2 Z3 R2 @
      s1.change(a,n);
  y3 n# g) v. M+ `     else
+ f- n* i7 ^) ?8 b4 V6 J' r      s1.change(c,n);
/ }" C. L$ w; ~/ D. L; v1 h' n3 C" Z     s1.display();2 ]4 P' W' G& J9 M3 ?2 G8 v* P; g
}* a/ Z& a" k% G8 Z. ]
delete[] a;
' |9 s7 l. l! R8 { delete[] c;
' j* r1 W/ r  Y3 b8 i+ y// finish=clock();8 e1 R, Y& ^; V# h6 l2 F6 m
// cout&lt;&lt;finish-start&lt;&lt;endl;0 @# I& ?5 O& W6 O
return 1;. C- X7 Y$ f" U, Z1 S1 K0 C/ M
}</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, 2025-8-20 10:01 , Processed in 0.833069 second(s), 109 queries .

回顶部