QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;! K8 o- M6 E0 s' S  P; n
#include&lt;fstream&gt;7 i8 W$ y1 f+ i' k$ ]  M; C
#include"string.h", `7 `1 J2 E- a: O
//#include"time.h"0 h5 u' J( p# _2 B5 A
using namespace std;
% F$ O1 A1 o& z2 ^+ X8 fifstream in("input.txt");
9 W+ `( ?$ X' K% U# d% K* Q, |0 hofstream out("output.txt"); ; U" y* C$ S) }0 U$ |
class String
! ]! ?7 N6 o: M; A{
6 p: S+ K) z% ]public:
! i/ g0 |/ e/ d! ?1 X+ N String(char *s="");$ Y, x2 K0 [+ S+ ]0 M
String(const String&amp; s);# J0 a: d2 T% U1 M  s/ X5 u
~String() {delete[] str; delete[] pre;}1 _- V' c3 G8 l9 m! g/ b% X' Q
String&amp; operator=(const String&amp; s);
* d, R: }* O3 [3 N$ }* n int length()const {return size-1;}
0 @8 p: U7 V/ `' K$ L int get();' A& v7 o6 l- L; p
String&amp; change(int *p,int n);
% k6 {9 I* g% |/ ~; O void get(int *p);' G0 h; L: C0 \0 r. E, H
void display(){out&lt;&lt;str&lt;&lt;endl;}
2 B! n: S0 G6 E  X0 R, [* g% tprivate:" K8 c) F4 z9 k) P5 z7 V
char *str;
' N! i1 H: x1 Q; S8 b; B    int  *pre;
! q( `3 [( c9 U7 Q* o4 j int  size;' B$ z1 H( t( ?. p& B8 {7 q
};</P>( N. c- t+ @6 B3 H( ^/ s3 C
<>String::String(char *s)# O1 g' |% L5 S, s
{' O9 A1 x. p, M/ x2 O6 N: W3 M& V& r
size=strlen(s)+1;
' [9 X5 r/ |; e, i3 S8 s3 F str=new char[size];; ]9 B( Y) w) T: n# z9 ?9 Q3 y
if(str==0)  throw "error";; f8 y+ p) g3 t4 W. I: {
strcpy(str,s);3 N4 U6 z% C9 B9 K" {: V
pre=new int[size];6 C; A- ?) V5 ~. p9 g$ {1 ?, M
if(pre==0)  throw "error";! Z: V4 @$ }% R* x5 e- e, a. J. t
}</P>
0 H  {3 S' l$ E9 g5 R7 H: H<>String::String(const String&amp;s)
: I! N2 z& h2 l6 Z' k{
0 g" J$ @2 h2 e4 q- }- D6 t* d/ C size=s.size;/ J1 t) D3 j4 p; V, B) s/ H
str=new char[size];
3 t2 _+ L% w+ J; e4 K, ?' I if(str==0) throw "error";
: N: G; f# w6 T! g0 K9 J strcpy(str,s.str);! x* G6 Y8 j) }" U
pre=new int[size];+ }7 @4 e7 p# ~  P8 S
if(pre==0) throw "error";' s5 L7 H/ }$ w
}</P># k4 q  a' m3 l4 a
<>String&amp; String:perator=(const String&amp; s)5 {; R; r$ O# A2 F8 I
{
# c6 z/ z; x: \2 n& g' _, B4 y7 @ if(s.size!=size)
$ j: N) E2 T1 W. ~; D {
3 d0 ?& b8 F* }! |6 r  delete[] str;
  R4 }; D) ]7 C  str=new char[s.size];& ?  p1 x! v0 b& t" g/ ]+ K3 ~$ G
  if(str==0)
6 }- u- o  u+ I4 q- I, Z7 r   throw "error";6 L5 W  t% _; q( z6 l! ?8 g
  size=s.size;. q% m! F7 Q+ L
}
- J# ~; _1 C  B# ~ strcpy(str,s.str);
+ W8 c  {/ n9 V4 { return *this;; [: A2 ~% m! l: {
}</P>
# I8 O) ]$ N* G) K1 Y<>String&amp; String::change(int *p,int n)//将整型数组改成字符串6 s+ a3 p  T/ \# J, n- u6 s
{, J4 b' X9 }/ i: _- c; M
int i;
2 T+ x" N" ~9 E. n) w* m. a delete[] str;7 B4 ~- b2 g3 t. ?; h$ l
str=new char[n+1];" S0 i( A5 f# k; N0 q2 M
for(i=0;i&lt;n;i++)
7 A; e9 g5 y, V* q/ H  if(p&gt;=0&amp;&amp;p&lt;=9)
3 O* [7 S5 K" ~' E# T   str=p+48;# o5 A( o" }+ {) q8 I
  else. G3 W0 D. D- U) ^( ~( \
   switch(p)
  y) }  d. V  d  }& R1 u# C   {
. j- g; H9 u7 A: v       case 10: str='A'; break;% ^: a; J& E2 D0 k8 ^
    case 11: str='B'; break;
! K# d& W7 r4 D    case 12: str='C'; break;, V  a% L1 u5 g4 v, {/ s8 G+ W1 P
       case 13: str='D'; break;
1 E" [$ O1 L1 _$ I    case 14: str='E'; break;6 d' ]$ [6 ~1 r& X0 S$ d/ \2 x
    case 15: str='F'; break;
1 o2 g6 z: K" `  q' v   }& Z1 `* K6 J1 {# {! a+ `2 |
  str[n]='\0';% g1 {4 C' |/ V: j9 i3 O
  return *this;
$ ], O. R) _7 u( y# y+ q}$ ^- f. D; F* Z
int String::get()//输入一个字符串0 u. O& ~8 ?1 e" p
{; b' }6 J3 G0 B& I2 y; h" H7 i
char tmp[40000];
3 l$ o$ k% o' E5 h# I in&gt;&gt;tmp;1 \  }: r- u( m" p# X$ O
delete[] str;
: p1 z' u5 r5 k3 W" Y size=strlen(tmp)+1;
  c# p! t3 g9 r  Y+ l, T str=new char[size];
1 f) y9 O! B3 u! ]3 F6 B/ t if(str==0)' D- L7 V( n! p* q5 T" a
  throw "error";
; r) b/ P2 K4 v0 F strcpy(str,tmp);* s% |2 \# ], `) W5 W- d
return size-1;, e4 @* V: M9 H7 x1 j
}</P>
1 y7 x$ [: ~: X6 Y2 C. Q0 J" S<>void String::get(int *p)//将字符串改成整型数组" J( H. v5 F% F1 h: {
{
8 @) R- F9 X! D/ L, ~$ ~% x int i,j;) H- P* u; Z, M& Q7 m- z
for(i=0,j=size-2;j&gt;=0;i++,j--)! T& b3 W* A+ k! u8 C% F( d$ G. ~* Z( `
  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')& [: u& B& R) v, T# r1 i2 K
      p=str[j]-48;
( S+ Y. ~2 `, _4 w  ^2 U. m3 t  else
4 A4 b) b0 f+ L- B7 l  {7 O8 `7 Q* `6 J4 L. }, }/ }
   switch(str[j])/ Q4 e: J3 y  u3 I2 O( }
   {
% _6 v' a# X7 j3 N       case 'A': p=10; break;, c) w; B1 z# E. p- i
    case 'B': p=11; break;
6 R6 G. J+ \) x# v% X% N1 G    case 'C': p=12; break;
" @# f' K2 L0 D0 j       case 'D': p=13; break;* H+ K# P( W' P" {
    case 'E': p=14; break;; M3 y. ~7 v0 ]& _( I0 ~' ~; n
    case 'F': p=15; break;6 D, [& l. f9 n% j# `. ?% g8 O
   }
2 q1 ^0 k1 X5 c  L' G" J% v& K- C" l  }4 w& Q7 V) B9 t$ J9 i
}</P>
% @9 x' `. T6 l& x* `<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
& O. F% A  i5 v{
' `1 p: ^: R9 E; ^7 B int i,j,a=0;8 I4 r0 ^" W) `3 W/ G3 ]! A
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)5 D* J* B' {- J( g* e% l0 F8 D& a
{
) a% P) O! h. m  C0 \     c=p+p[j]+a;# b& z( W2 Q. a, h! T& Y
  a=0;
3 i& B0 z! G4 o" Z7 a' x' w4 O' v  if(c&gt;=k)
% Z6 c3 W# f$ |- q" |1 b# F8 b) q  {
. U' w/ g$ D5 S5 A" j   a=c/k;* |6 A: @0 d: p8 b) P
   c=c%k;
2 {+ `- z2 A  p6 ^  }
# v: v* g# N4 R! {& c3 h }
+ }* \8 I6 i& [. S$ n+ q: H if(a!=0)
$ G. c. V9 X! P9 Y6 K/ q: C, ^ {
4 Z* F/ F0 Z" ^  c=a;7 R: ~/ e7 _. X) D5 C
  m++;
( d, W9 o9 }4 E }, ?$ Y9 e1 w- g
}</P>2 u$ V: K7 n8 K. w
<>bool match(int *a,int n)//判断是否为回文数7 _5 ~7 v& ?% W& ^# e7 X# g
{6 v7 e; a9 i$ `! i9 H! T
int i,j,h=0;
6 v2 f! r/ l3 t3 s3 k5 v& u for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)7 ]- ~! |) {, v# m  L, a
{, r/ A) h3 r, w+ f0 s. a+ p
  if(a==a[j])8 {/ m5 X/ I% S9 m, m) w: |, Y
   continue;& [4 w4 y0 t' O8 V& m" j# P
        h=1;
8 y/ ?3 I( V% y% x  break;) P: Q6 r- I) n" a# R
}
8 F- G8 A$ G0 L# o* |; j if(h==0)
0 R7 W, V+ E3 ~  return true;
; w; L% @, O' a+ R- C( [5 y else ' Z( H5 D6 r) q! w& {# A
  return false;
9 h8 C. [& \0 [) P! W. q2 s}
% \$ U( \7 r1 n" S//clock_t start,finish;
3 C+ u! V0 |/ Cint main()8 Y! p6 V8 W% o# k
{//start=clock();
3 u- W- j/ d/ m. ~ if(in.fail())* L- D8 s$ X2 {2 |6 J, @4 }, s
{
8 v' m) V3 y: `3 {3 n* {3 U' l  cout&lt;&lt;"the input.txt is not exist!";; ]8 l; Z# ?* D2 t$ N! d" G
  exit(1);
; e! b+ ]- _! x1 b. }$ z# v6 T }
& h( U+ ?$ |: d3 ~: b String s,s1;* H; S  @/ X. Q; H0 I
int n,g,k,*a,*c,m,h=0;  X$ I* a+ c! A3 g  w$ C1 A: r) t+ v
    in&gt;&gt;k&gt;&gt;g;
9 B  n6 {) _' b- M- J- Z! F- Y    s.get();
. C; O! z2 o0 d& p/ T
, V) \6 v* x6 n' A    n=s.length();
. N" {8 Z4 Z, D9 D# m" ]% H+ P. ] m=n+g+1;  f# a. m7 L5 C2 t( ]+ m
a=new int[m];3 _0 L; ^  x' a5 w3 _. R
c=new int[m];0 L- @0 _" O( ]! t/ j
s.get(a);4 W" k4 `4 K3 c: u4 l/ a& H
if(match(a,n)): c% e+ ~5 z8 D5 h% E
{
* y$ l. b. k. ]8 d9 M0 D: C  out&lt;&lt;0&lt;&lt;endl;
1 _' ^7 a* D5 v. ?# o7 ?  s.display();
$ o5 F: Z' _+ i" _" s  return 1;
0 S% C, k2 F% g+ n }9 Q# S' e# N( U: l
do# k$ V# J. E4 }4 X2 w: J
{
! M* C- O1 m/ J9 ?* M3 i9 F2 l9 {     if(h%2==0)
6 v; L6 ?7 d4 M3 u  V5 y, A- N3 T      add(a,n,c,k);
" _9 u0 K* p/ J8 s5 p  s* h  else
% d  ^: r# t1 _   add(c,n,a,k);' t; }- I3 K% J8 [/ D8 `& T
  h++;
' \3 g0 l+ Y3 y# d( U( q6 t5 P  if(h&gt;g)' g* w/ Q0 O! N8 j
   break;
) Z( ^2 I0 m6 a) \' b# k( V( C }/ Z8 U9 V, n# \, u& ^
while(!match(a,n)&amp;&amp;!match(c,n));
% g# c" A9 v! v( w" ] if(h&gt;g)
1 c2 Y! @- C% f: X     out&lt;&lt;"No Solution!"&lt;&lt;endl;
7 Q; S. ^3 J* F# v0 v8 Z9 g6 r# h else
9 W2 F* t0 i% o" D) J {
2 D* p/ a+ A5 q# }( q! J      out&lt;&lt;h&lt;&lt;endl;
& A6 ?# h) G3 L% w1 C, l  j# m- e; b     if(h%2==0)
) a  n1 e2 [8 z$ g% [: P% y" ^      s1.change(a,n);9 R' D+ k+ K, R3 R! \
     else
: D. `* U7 o* b9 `  Y! H" M( ]      s1.change(c,n);6 s+ [1 D' h3 S; l& d" X
     s1.display();0 h/ P  i3 V8 q6 S, k# v* f4 E
}
  _7 }& k% P/ q& ~: U- { delete[] a;
* B) x& X9 P3 q, T! u delete[] c;
7 D0 i) K- f  _4 }3 i// finish=clock();
% |* j  j+ {; g& q// cout&lt;&lt;finish-start&lt;&lt;endl;
/ D, L: A8 \, H( U( ?" A/ E return 1;; B, O1 `. _" ~9 L. {9 ^+ `' 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-9-3 20:18 , Processed in 0.410281 second(s), 109 queries .

回顶部