QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;+ N% a' L- }* Y; k8 q4 Y9 x9 V6 f# j
#include&lt;fstream&gt;
  p* v8 y1 M" e( ^' W  d#include"string.h"
: p* }  X5 B! `+ _, z; i//#include"time.h"! U0 a5 p2 D# ~- B* Y2 @0 N
using namespace std;
1 u: X" l( z5 T1 hifstream in("input.txt");) y, b: W2 ?0 T% o$ \6 m
ofstream out("output.txt"); ( P- U3 b- }- X1 V$ R* H2 m
class String
  w& Q4 a, b$ M' b* m# }, b{/ o: y, A- Y, B
public:# b( w4 ?2 O6 C0 ]% s
String(char *s="");* ?- s; r% ?) F  q6 h
String(const String&amp; s);
2 ^* `7 h$ ~0 {0 c: T* e ~String() {delete[] str; delete[] pre;}4 k8 z/ R  S% p, z" I- L
String&amp; operator=(const String&amp; s);" W% E8 c2 H, d* t9 M6 O: Q$ K
int length()const {return size-1;}- q/ T# E& ~( i) d
int get();
4 z8 m$ f, r* n, B5 } String&amp; change(int *p,int n);
% b8 e; I- z5 _/ I/ f8 ] void get(int *p);% o; M6 C$ t+ x5 }
void display(){out&lt;&lt;str&lt;&lt;endl;}% T( O- w9 ]& l
private:
- j( X$ \2 X' `1 U char *str;
9 D' Y# c( k! j0 k  q    int  *pre;
0 @2 P, f' M6 w% D int  size;+ o+ Y5 y& T7 y3 ?0 S: ?
};</P>
- n. T; K' I/ U1 [<>String::String(char *s)3 V  }5 Z7 G  m0 J' y5 U( r4 n
{
$ s# Z/ L0 r  ~9 ^ size=strlen(s)+1;
) g( ^2 t3 n9 q! I& l str=new char[size];' ], L$ L7 U; n1 f! d
if(str==0)  throw "error";2 ~% `* U- C" \, n  k; X
strcpy(str,s);
! _6 |; t8 O" |& \7 X/ {. d pre=new int[size];/ _0 l% Y2 k# m
if(pre==0)  throw "error";
# }9 E. ?0 E3 Z9 _* ~( Z}</P>. [5 T  y2 F% @0 i
<>String::String(const String&amp;s)0 }. J7 D5 \% ^; R2 i2 q7 j. ^
{# l5 Z; ^  `7 ^. s" b
size=s.size;7 x6 |4 \+ m" D
str=new char[size];# ?; j: L# ^4 w* f1 }* ]
if(str==0) throw "error";
7 F* f! M' }1 r+ I. y: t strcpy(str,s.str);, t4 l- f3 y3 s% X( }; P' X; X
pre=new int[size];
8 y) z# K& b+ }( q# R if(pre==0) throw "error";& W2 X, X% H& m" B, S. x2 G
}</P>
: a3 u5 a7 ^! H0 o& u& K# y! k<>String&amp; String:perator=(const String&amp; s)
5 Q" ~6 ]5 ]; L* F{9 f6 i3 D% V7 ^: M$ [  g5 k, a
if(s.size!=size)4 Q" |- r, z1 V4 E# ]' ^
{& @6 u/ v" Z+ M- m; |7 Q
  delete[] str;& U9 i2 k7 u/ y- ^5 f
  str=new char[s.size];
2 i9 P: v% n) ~- E# ~6 v0 ?  if(str==0)
& Y& s7 u: z& [0 k   throw "error";& Z7 o2 q( [! @  N
  size=s.size;8 u9 W; q8 Q' [  ?7 C
}
- Y/ }+ a" l% k% S2 r" h" r strcpy(str,s.str);0 ~/ I2 R6 q. |; x/ h$ Y
return *this;% o9 N' Y% ~- i0 W$ x9 J. N6 Y
}</P>9 a2 z" {" k9 M% X
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串* B9 |: A! _+ A+ K5 |7 K* x
{
$ I& s7 H, F0 L3 C* V$ O int i;
/ M0 {( n8 ~$ X3 u# C delete[] str;& c) C" E& }6 G) h
str=new char[n+1];* |0 ]: B& Q" n, Z4 p
for(i=0;i&lt;n;i++)0 x0 M( g- J6 K$ j" F2 s
  if(p&gt;=0&amp;&amp;p&lt;=9)( z3 R& r3 X! i- d0 F
   str=p+48;
2 E0 u. Z( V5 X/ r  else' e1 u6 k5 F1 L- v! O/ b
   switch(p)4 v+ d! k# a, M: k! A0 ]
   {
  Q  w4 q1 Q6 u' {) a* P       case 10: str='A'; break;
3 x+ I( t, \. a* E    case 11: str='B'; break;+ c9 o$ \& G" @! E
    case 12: str='C'; break;- w! m* E, `2 w+ T  s% l" i, J
       case 13: str='D'; break;
2 a2 I' P& V: \1 n0 S    case 14: str='E'; break;1 M* P) Q- t9 h
    case 15: str='F'; break;$ i, I; F- E+ W) V( h( ?
   }% I2 T" g/ e% O* b) y
  str[n]='\0';( O1 {# o+ L8 C$ z; b  g2 n; \7 x3 r
  return *this;5 o# E2 M# F3 ?+ m. ?* [
}
: T0 Z$ E6 ^" @" Nint String::get()//输入一个字符串
) H8 B& x  t5 K# @{  h" I# F; l  p, V- v, O
char tmp[40000];6 s+ d3 H$ z* E  b5 q9 u
in&gt;&gt;tmp;
: l: X9 q$ J% z* @2 b delete[] str;
* [/ \  T5 J6 C$ T$ D9 t5 I size=strlen(tmp)+1;4 |' Y: T' {2 @% L- d- @+ u5 F0 S
str=new char[size];
' _" N. v  X$ y8 F) k if(str==0)* k1 K# l7 B0 A! n6 h: Z
  throw "error";8 q0 N/ ~3 @' ~8 ~& ~- f  H
strcpy(str,tmp);2 ^- p+ Q9 A% l( N9 Q
return size-1;  e  Q' o6 `" R& G; D) O' Q- h
}</P>
9 j9 H3 \$ f9 R* X# B3 C: a7 o<>void String::get(int *p)//将字符串改成整型数组
1 q+ o# ]/ y* J9 x( t% H) h{
! P; A1 w; g, _" E int i,j;& }0 R0 F5 d6 X5 e1 e
for(i=0,j=size-2;j&gt;=0;i++,j--)1 S8 ~5 o2 c, x/ ]
  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')* c1 [1 w; y9 M0 w
      p=str[j]-48;+ y9 Q& R% X/ o4 {
  else1 q9 `3 B. V* _+ e! F
  {1 J: F+ ]' L5 }4 j: ^/ Q: N
   switch(str[j]): M* K8 W( h3 H  s/ ?# `
   {
; q# A# H% @3 V6 P+ k! b, c       case 'A': p=10; break;5 {( T% k( O3 D, A) ^& E& B
    case 'B': p=11; break;
- w4 S" _5 m0 }9 _    case 'C': p=12; break;1 F  x: Q; J- O- S2 J7 v
       case 'D': p=13; break;
- s) H6 }" R& ~, V! P' y! k& W    case 'E': p=14; break;
( @0 H3 S8 V( |! P% n    case 'F': p=15; break;
* V: o* h0 u- o/ m/ X   }& ?/ z/ G/ e" e3 m' X# B# E6 e
  }
" U' j8 k- F. H: p  v7 x}</P>
' M' h! Z! |( X; b8 B& b6 Q& ?<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加4 ~' v" y0 ^! R- ]( Z, X
{
( C. H* S: ~/ C1 M# Y. I7 g' A$ D int i,j,a=0;8 O) y7 d! X7 _7 o$ H' S. ?# l( X
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
' t' j4 y- n0 d' Q$ X {: s" G% {8 |; c& m
     c=p+p[j]+a;6 j, u. R- r) N; W( F3 p
  a=0;- u0 |3 f3 M! }6 T. M1 e
  if(c&gt;=k)
& ^% s8 R* k9 _) y0 u  {- Z' \. O3 N. [
   a=c/k;
; C/ z: B. V* |  M  d6 f   c=c%k;- c3 O  D4 W# A0 K- X) y
  }
8 n2 Y; H4 G# [3 { }
7 q% v4 g7 x8 M8 w if(a!=0)
. U* W; z+ \, k% n' Z7 l {
4 z" b' G' E/ V& v6 A- j+ t& F7 O  c=a;- _& w. V4 j) I. H% Z6 F4 L, A7 a6 y
  m++;: n' c, w' q2 n7 V6 [
}% h6 N. I0 [* R
}</P>
$ q$ x1 N  P5 Z/ @1 P4 w<>bool match(int *a,int n)//判断是否为回文数2 l, D' m- H6 F9 c$ l, f6 _. w) H
{  U5 x( e% [* S7 e4 e
int i,j,h=0;) Q/ |, Q. m7 x
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
; e( c2 d( I: W! G. W% H% y6 z0 E {# j- G, I% q, s- l) g" m' K
  if(a==a[j])) Z4 N6 I3 m1 i2 T& H
   continue;# c( Z2 s) ?: [
        h=1;, A$ q) I# R  K
  break;7 J1 H0 p  p5 t5 U5 M
}
, [, S& ^0 u( `  l5 i$ Q( A7 q6 n if(h==0)
+ t* H$ }5 h9 t  return true;
* [0 ~. G$ {$ _1 q6 b else , r" ^; ]& {% T
  return false;
1 Y8 ?4 K, J1 v; D}' b9 |& a; c9 T3 _2 i: {: u
//clock_t start,finish;0 u9 I$ t. W6 @1 _  U; ~
int main()
* d3 [# D* y  C: P# T{//start=clock();
0 D& K" `- K. h7 W if(in.fail()): |; V, b; ]2 i6 H+ \
{% X9 i; r( d8 C; Z9 |
  cout&lt;&lt;"the input.txt is not exist!";
. s$ B" M* A2 P) }+ S6 E' a( }  exit(1);' g1 r! ?% f5 c. U4 h
}
7 n' O* D  I$ h7 |/ V- v* f) G String s,s1;, Q% m' `" P# n1 l1 i1 o
int n,g,k,*a,*c,m,h=0;4 V0 S. {" t. |7 ^
    in&gt;&gt;k&gt;&gt;g;
2 @3 B! l) B6 z) n    s.get();2 B0 r0 c  v. v  G8 R% c

! U; f9 W9 \3 [, c: [6 t* c    n=s.length();% V4 R. G: ~1 a' r9 ^% X, w
m=n+g+1;) _5 E- u' g0 z9 b8 Z" I9 C# U
a=new int[m];1 w6 `" N5 e" J5 b3 ^. F& m
c=new int[m];$ G% {; p+ o5 [: v+ p
s.get(a);. v0 y+ }! b/ c
if(match(a,n))
0 J! o! `+ H6 }8 v- b* t/ ] {
$ R0 y! Z& m! k5 ~  out&lt;&lt;0&lt;&lt;endl;
$ ]# L! |" K& Q) R1 w  e- s. P  s.display();
+ e. e* y4 T$ c0 H: C, V! H0 e+ u7 Z  return 1;
  o8 B4 w. l6 P( H5 ? }
7 J, _. S; e4 }- s do; H0 [7 u; M- }1 X' h2 S- C1 g
{% F+ K# h1 i1 d, u
     if(h%2==0)
- r, ~% s; r+ @* _9 E+ ~* `      add(a,n,c,k);
- N) X; `# T; A2 V: u  else
& X2 @. ^$ T' M; w: x   add(c,n,a,k);
( t1 s! ]8 ]; K  h++;# X. R: K# d5 B; I/ r2 O+ ^- j
  if(h&gt;g)
/ C$ p6 E7 J' l- ]; X$ }" o   break;
- r& g& S7 j! _- n, Z  r }) M8 H4 q7 v- |! \3 @6 c
while(!match(a,n)&amp;&amp;!match(c,n));: o9 o: {3 h4 o9 x
if(h&gt;g), W, y8 u/ [: |9 q% ~2 ~
     out&lt;&lt;"No Solution!"&lt;&lt;endl;) K( R2 Y5 K6 U1 N
else
+ @4 ]' Z+ v% q& m# _- ] {
$ r3 a" |0 G: z; P/ t3 G$ L7 s      out&lt;&lt;h&lt;&lt;endl;8 `% b+ S8 g8 b
     if(h%2==0)
3 k$ r) p' L: m# i, k- k% J/ j# l. [      s1.change(a,n);; M0 s% i) V5 n# ]5 u
     else& Y) @/ U4 X. L; Z" G
      s1.change(c,n);# {- v' }) s5 g2 Q2 }0 C
     s1.display();
0 W7 d) e8 L" k  s8 G }
  X9 F' l) j- y9 y" o8 n( k, }) ]* O delete[] a;# {; w6 }9 ^+ ^4 ^8 Y0 k
delete[] c;
0 y$ @8 ~8 m8 a# r5 e$ r// finish=clock();% ]3 o$ s3 Q& e& G/ H: E8 o
// cout&lt;&lt;finish-start&lt;&lt;endl;2 G7 \( k8 _- [  U7 V4 s
return 1;
# G' m0 h; ^# i: k0 \' f}</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-6-3 11:25 , Processed in 0.719126 second(s), 109 queries .

回顶部