QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;" ?  A1 ~7 X0 X) i/ K" m
#include&lt;fstream&gt;  {, C" s4 I, e8 d( b
#include"string.h"6 u% E+ M+ u+ ~; d' S- S
//#include"time.h"- R$ [2 V3 V8 Q/ t: @8 i
using namespace std;
( [- k) `0 z! a+ I( R3 N' ~ifstream in("input.txt");
: W9 s" }7 f; N$ Iofstream out("output.txt");
: L8 N$ A5 h2 O4 w% n/ P5 z! P, hclass String ) a0 N* D2 \5 ?* J6 `: e
{( B. m3 y: n  T$ R, x, e, |
public:' T) p5 V& E" E4 F' p
String(char *s="");7 t0 q# K/ S0 v0 \- K- g
String(const String&amp; s);
8 q* p( }) E1 n ~String() {delete[] str; delete[] pre;}
" R, p4 a8 O  i% d& O* w String&amp; operator=(const String&amp; s);
# C6 d# _0 U& f int length()const {return size-1;}$ \+ b  n" c; V/ L" f$ ?
int get();# \. x+ [$ e' G% d
String&amp; change(int *p,int n);8 [4 ~$ I4 t5 S& l' d7 j/ z
void get(int *p);( I$ c! p/ U3 i6 h6 L
void display(){out&lt;&lt;str&lt;&lt;endl;}
4 @( i" }1 G8 U" uprivate:
& F8 w7 O) ?4 O4 s! Z char *str;
7 m2 K( h1 ?5 {0 Z2 V6 J% s    int  *pre;
3 h9 t9 Y% v2 W9 A& @ int  size;
* Q/ U6 k( A2 Z7 {( E$ j& b};</P>% I+ R" q& p# v4 g8 q/ o
<>String::String(char *s)1 E; A" p4 [1 r" h& c9 P8 i1 C3 i
{
: M- m$ R1 n: f- }" Q8 K size=strlen(s)+1;+ p0 S7 i( F- ]+ u8 s4 X
str=new char[size];
( D. N6 f3 r# p5 Y- y if(str==0)  throw "error";
5 T! f% t  {( ?' P4 ^# L strcpy(str,s);
6 }3 ~! v) u3 a4 g/ S pre=new int[size];
9 c7 D5 U  b0 Y+ j7 R. W2 R/ m if(pre==0)  throw "error";, [( l. g4 B' I2 B; W
}</P>
/ V" W, N$ C+ `5 K1 O- I, X, H& ]<>String::String(const String&amp;s)2 Z& x# w1 r( Z5 e
{
% a# }: v$ V+ D9 `2 `- w# G. c% f. i# W size=s.size;
; R$ d" l; u: D str=new char[size];/ B0 V# Y" F9 v% P: \
if(str==0) throw "error";5 U7 y3 i# Z: k+ a, [+ @
strcpy(str,s.str);6 t1 V: M. d. A* @
pre=new int[size];% ?% t, v" I+ R3 K! |8 k
if(pre==0) throw "error";# V0 r% ~" V. ?; p; V& `  i
}</P>& Q9 i7 d% R6 e- W( T5 z  ?0 N- g
<>String&amp; String:perator=(const String&amp; s)
( K) z$ f3 |6 b4 W# p8 l& L* `" F, V{
+ @. ]9 _3 u. I7 A if(s.size!=size)( A. Z/ u0 [3 I4 s
{
& Q3 X* U6 r! R: F' Z9 k  delete[] str;; n$ B) T; @1 `) e5 A
  str=new char[s.size];2 Y; K- n* Q4 {; ?  S
  if(str==0)
. n# g& b: g' m6 a4 v   throw "error";' Q$ f; a5 H2 j! R4 C6 B. q5 |
  size=s.size;
% H1 a- _/ e" T" x% }( v }
, }* s3 E* z7 a) J strcpy(str,s.str);
5 Z, \& {, }/ f7 }% P return *this;$ ~, L; L7 G+ U% ?# x5 T
}</P>
$ e  K& x2 r. g9 b# y<>String&amp; String::change(int *p,int n)//将整型数组改成字符串% Y& U6 n' f  Z8 |
{
$ I" k3 d- Q* R int i;0 A" P+ J  g; x: ]/ q; }& \0 x
delete[] str;
$ M6 j, Z* g3 C! G$ k. | str=new char[n+1];
+ _" D. c. s  V1 \* k& k for(i=0;i&lt;n;i++)
$ K  m* p2 q/ O' Y+ o  if(p&gt;=0&amp;&amp;p&lt;=9)- I/ ^) O; _6 l) d$ P
   str=p+48;- z5 D/ f- L. F6 M3 E$ q9 ]
  else6 d1 u- ]3 l6 E5 k. \4 |" k/ D2 Q
   switch(p)& d8 l6 [7 M8 |+ ]& A
   {- Z3 r/ R# k7 V% L& ^  H- M
       case 10: str='A'; break;
, C; h4 I. f, J8 [* e    case 11: str='B'; break;
3 s1 s6 I3 x/ t, M) t, b, M    case 12: str='C'; break;' r2 O$ B% E+ Z! \* v( E. \$ ?3 o
       case 13: str='D'; break;
/ n. X7 h6 t  Z, d    case 14: str='E'; break;! [' c1 w, l( h' y+ k3 \8 o
    case 15: str='F'; break;
9 B5 G8 h; U4 U5 {+ q9 q   }/ B' y' U' x" x) W6 ^0 e4 {
  str[n]='\0';
% _8 \/ P; v" G6 l2 ~  return *this;: \' Q3 c& m3 V, N% G
}
6 ~5 y% J/ q/ j7 J) k0 t) s: Dint String::get()//输入一个字符串# L9 c0 D/ _1 _; I
{* _0 c" w* d. s6 Y- w
char tmp[40000];
0 j$ J3 `# g3 Z) H in&gt;&gt;tmp;: ~$ Y% u8 S: \( P8 b& c' k1 s
delete[] str;) F2 A" Q1 _0 C) o) m. y9 }3 C4 W
size=strlen(tmp)+1;
( `9 V/ `( A0 j- ?4 ?3 }$ I' z# X str=new char[size];1 G  m! N) u) Y5 r
if(str==0)
8 Q, l% h+ ^; p" M9 `# J$ H! O  throw "error";, m& m/ M% U9 \0 I' }8 o* g
strcpy(str,tmp);3 o& Q6 V1 G6 V# b
return size-1;& P, d1 z, t7 I
}</P>1 C9 U2 N7 B% M7 s8 r) Q
<>void String::get(int *p)//将字符串改成整型数组; f) |; x. U  [6 H
{" n) ^1 D3 ^9 Y4 D
int i,j;
1 m- ?2 w& ]: D! t for(i=0,j=size-2;j&gt;=0;i++,j--)
# c# C. }2 Q: s1 J  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
, R' q7 j; `) d) V& k- N      p=str[j]-48;- h4 Q# X. u( S4 m* B. ]. v) W6 _
  else# O3 {( D! p0 W/ R1 f! p4 c
  {
* k% b0 S( j/ \8 P- s8 A   switch(str[j])
5 g  y4 r- \" q   {
0 C) K. Z5 W1 {% {; I9 j8 Z       case 'A': p=10; break;, H6 ^0 x. s9 ?1 P% O& ~2 p
    case 'B': p=11; break;
3 b. H$ Q, r, z6 Q* D" \; a$ v    case 'C': p=12; break;5 c/ I7 D- C* S3 t6 W  `7 @
       case 'D': p=13; break;
9 p% y/ ~/ H) M) @    case 'E': p=14; break;% t, v  ~3 U% X  @; ?9 g
    case 'F': p=15; break;7 \" s* Q3 X1 C2 p. f; \
   }
# R: y8 c, A9 T  }
( o$ X: Q- S9 L}</P>/ x0 c$ C# F* Z4 a; E8 W
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加/ g0 U% h- a7 Z; \2 t8 |
{1 \  M" e2 T0 G# I3 }( t
int i,j,a=0;
* T3 {' \: Y$ U    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
' x- C4 z! U0 I# W# O" |  O {
6 Y+ ~+ e! w7 g7 k+ }8 T     c=p+p[j]+a;6 t* F9 W- h  E0 _) s4 S
  a=0;
1 t& W! C  h( }. U- O0 m8 Y  if(c&gt;=k)
3 j# d3 u" u$ ]1 p! E: X  {
7 W, g  ]2 d! {7 q5 o   a=c/k;8 B4 v9 B+ ~5 z% G8 K' ]  \4 j
   c=c%k;
( }* R( H; I1 Z/ c8 R$ |  }# I5 z, P2 K! _: H& r+ g
} 4 r# E. {6 l2 I# f" a3 j& G7 e' |( q$ B
if(a!=0)
, g: c0 F/ ^* f1 E% A3 Y/ v+ [ {
' {1 T! S* \1 J2 f; h/ e7 m* _1 Y  c=a;2 S9 A1 v7 A8 I+ [2 C0 D# M
  m++;
1 d/ a! y, D; E+ `! o }
' z0 {' Z8 w7 p; K7 ~& C}</P>: Q/ P& s7 ^- V# E1 f/ A) O
<>bool match(int *a,int n)//判断是否为回文数
2 w% P: Q* z, I) }: d5 X) t{
, M% y5 Z9 d3 D int i,j,h=0;5 n1 E7 s# `; Q3 c
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)" Y3 H3 q, t5 X: f/ b/ |8 X
{
1 c$ e( p- ?/ e: m  if(a==a[j])& a2 z' C! J3 x; B- |; i
   continue;
# Z" F9 d: N% P% ~8 `" Q7 C        h=1;5 O. k# y. M# ~& W) Z. M5 u- [! `0 b5 V
  break;6 c+ H- ^) s+ f/ y& |/ x  Y+ G
}
! B5 ]8 M  `/ I+ L$ R5 i if(h==0)
& B- k) C& Z! L9 }6 q  return true;3 o$ J6 t5 m* _; R. W! q3 }
else
2 B% [, O* k# S% p6 m  return false;9 S; ^' N$ i+ c
}1 ~5 w4 j5 s. G* G/ O/ ~
//clock_t start,finish;% n+ {) s+ ]4 S6 V
int main()
( y$ o% B- a) X) e% D{//start=clock();) |! T+ p2 D# o5 Y' {
if(in.fail())/ Q9 g1 g4 B! A& f& U
{5 c- X8 J; d- e7 d8 t: e8 ?" l& I
  cout&lt;&lt;"the input.txt is not exist!";3 @/ K1 R& C( n( s
  exit(1);
, o& U) x2 Y) X2 [. [ }& O, m6 I( m; \
String s,s1;
/ e# s* a/ l" _5 ?! G" f int n,g,k,*a,*c,m,h=0;4 S$ \! u8 C( Z3 e2 j
    in&gt;&gt;k&gt;&gt;g; ' O! ]9 J) P1 p/ Q
    s.get();, J* j9 d# G6 Z- b* G* Y
$ ~5 k; d0 J3 Q% G; n* `
    n=s.length();+ Y$ X2 D) L8 Y2 T
m=n+g+1;
2 n" o$ L: }) ?3 f a=new int[m];
# s4 O  }5 S$ S3 x c=new int[m];
  t% q% i- m6 y, i, e1 o3 | s.get(a);
8 E& y" D7 j% F: Y8 Z+ n if(match(a,n)); `2 F6 U; B7 b. y
{( b9 w7 K) v* g4 y
  out&lt;&lt;0&lt;&lt;endl;
; |2 [0 ]& r- ~0 o  s.display();9 Z; r! S# p- i9 G
  return 1;
9 d/ u- x) S0 N# t" z }" E$ d- b" w9 P( T
do
) r! M2 c8 h& e: x" z1 e: G {2 a, v: Q0 F0 a' H! u' S
     if(h%2==0)8 n/ T& z: p5 K8 O1 x: w& b8 X4 @
      add(a,n,c,k);
% g4 c; B& |) |4 ~# D  else
1 C, q$ p0 t9 c/ A5 w) I" C   add(c,n,a,k);) r" j4 Y  @. v: A2 a1 M
  h++;! n1 d, n2 E: a, T
  if(h&gt;g)
' n/ n6 I4 X( o* \  q5 q" q8 n   break;
- o2 L3 `% e3 e) X9 G }9 c+ ^& f* u1 ^
while(!match(a,n)&amp;&amp;!match(c,n));; s5 E5 q. Q2 g7 K( @8 Z2 P
if(h&gt;g)
! ]) |6 V: b6 i     out&lt;&lt;"No Solution!"&lt;&lt;endl;. z( J" w. l. c3 R* D
else9 c1 L& }, K) f
{: z9 V0 T" }1 }1 H: y! V: x) f
      out&lt;&lt;h&lt;&lt;endl;
& w1 q4 P% C* q. C, o4 @/ A     if(h%2==0)/ {4 @  W9 ?7 r3 D9 c& `
      s1.change(a,n);
8 U5 Z/ p! w' x. B' a- q     else
1 v4 g3 x/ J$ Y" q, E      s1.change(c,n);) q" q, M, T2 c
     s1.display();- y, S( N2 p1 U5 |6 Q
}
) ]' ?( U: n+ |. w; g& C# }- y delete[] a;! T4 a3 c# D% ]5 S! S( E( B) |. L
delete[] c;5 Q# c5 G2 Y2 f) T% M
// finish=clock();
) q6 S- ?5 b2 e+ y0 z: `// cout&lt;&lt;finish-start&lt;&lt;endl;: Q4 e7 i5 k# B1 j/ O  F2 v9 K* ?/ e
return 1;  W, d) _* P( X- |# F& Y
}</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-22 20:41 , Processed in 1.323454 second(s), 110 queries .

回顶部