QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
/ O. M3 b& V' f7 u#include&lt;fstream&gt;
- m8 N( R) B; x  }#include"string.h"
/ Q: V$ r5 w3 i; N3 x//#include"time.h"
$ k, d8 u3 v0 tusing namespace std;
3 F! V' x5 ~& n, ^) M) ?& Tifstream in("input.txt");1 i( E" Z: _: w; [% E, U% X' p3 x
ofstream out("output.txt"); - I7 i9 I1 ]! u
class String + c. u, P7 l  V4 H9 G+ M# x
{
4 k5 w& g3 M, Q8 _public:! u! T. k0 i" b/ e$ {) b9 q. L
String(char *s="");
) v! E4 [5 ?/ d" G  [9 Z1 B String(const String&amp; s);' k; T: w0 |) J
~String() {delete[] str; delete[] pre;}
( u- w$ k3 `" H8 D String&amp; operator=(const String&amp; s);
. h6 O$ C& q5 l* m' j: v int length()const {return size-1;}
- I. \1 L; e' S" k  A int get();) {0 V7 @# y5 |. y+ \
String&amp; change(int *p,int n);
6 _" r7 z" j6 [) j. { void get(int *p);
9 q; k  \" U8 c7 \2 Q void display(){out&lt;&lt;str&lt;&lt;endl;}
3 R$ Y1 e5 q/ W( ~/ d9 Dprivate:
  `, V0 p- u& Y  c char *str;6 l6 O% L! G9 g6 v$ z
    int  *pre;
# L; w- x) O- ? int  size;
/ ]# m7 Z1 D% L" \8 N1 W2 [};</P>
% g5 V! |+ H/ {) Y7 M4 q, \" l& i<>String::String(char *s)$ W* X" \# Z+ H
{
* u1 i5 \+ `" b+ B% B+ z& G size=strlen(s)+1;
/ i: d& E5 Y6 B$ y. e8 c str=new char[size];$ o; Q# g9 _. D
if(str==0)  throw "error";7 F& D4 w9 N; g6 V) @9 [
strcpy(str,s);' E% @2 S5 B2 I! N: r
pre=new int[size];
/ x8 \( V) ]7 a; h1 g. A if(pre==0)  throw "error";1 [1 u2 c) A$ i0 l& ~6 L
}</P>  u+ m% t) y& a0 g2 T
<>String::String(const String&amp;s)
+ Q6 o8 g. X( s- w{
) ^2 F( m: {0 ~* ^ size=s.size;
) f6 `$ P2 o" y( e6 e% x% u str=new char[size];
+ h3 Z4 E: M8 O4 U' |) h* K" E if(str==0) throw "error";( D5 d1 l5 N) Z5 \. R1 x
strcpy(str,s.str);
% t, x! w3 X6 R$ A, R! _4 g- D/ k4 N. R) j pre=new int[size];
9 [3 X2 d  a% ]4 W! } if(pre==0) throw "error";" i0 v8 \8 @0 s7 Y, g
}</P>' @5 [# S5 k9 @( V" G: s
<>String&amp; String:perator=(const String&amp; s)* b( Z+ P' {! l% L% C- k" T
{+ U9 H/ B% s8 S, u" u9 r
if(s.size!=size)  @. b% s6 h9 }9 o
{
) s# P! T( \: J3 O+ C& d! i  delete[] str;
! x: _- \( h9 I/ I( [$ _! O  str=new char[s.size];# h  s1 w+ k& _9 G( S! Q6 S2 T6 m
  if(str==0)
5 p0 S* ]4 y5 Z" N   throw "error";" A0 v" z9 M3 Q+ {
  size=s.size;, e, r+ n) j' ?
}# ]" o9 |, ~, l) m$ b
strcpy(str,s.str);9 ?6 B) D$ T$ B8 l* V  W. v
return *this;0 B) l1 x$ I0 @7 U: O, `  \
}</P>+ l$ Q6 {( b% W4 X8 i
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串  ]. J8 p! A' U4 k) P# L3 n2 j
{2 }* T* E, C2 x- K" W
int i;# ~; Y; D' w& K( e
delete[] str;  f$ I! z$ T, R' I! d
str=new char[n+1];
0 {- _8 }) m0 E0 _ for(i=0;i&lt;n;i++)- L+ ~, L' ?8 @5 U. l' M
  if(p&gt;=0&amp;&amp;p&lt;=9)
4 d6 p: e$ z1 B8 V; X$ x) w   str=p+48;
" I# B2 j& x: B, H  F) T( H" `  else
* a* X. D# G  z( h  u3 c   switch(p)
( f0 k4 y, \- c$ i/ s4 @2 G; |( w9 K- y   {' }  h$ y/ ?" x/ O9 O0 }
       case 10: str='A'; break;
; z! h  N+ A) b+ u! K! x1 x    case 11: str='B'; break;6 `; _6 Q; n$ ?( q7 V! T/ N6 L1 w# w
    case 12: str='C'; break;" t: J, g7 b. t5 J; j% J# D
       case 13: str='D'; break;! E; i9 ~8 a; I# Y9 |# K
    case 14: str='E'; break;0 k# W7 R- T2 E/ ?; I) ]8 P' m( B1 q
    case 15: str='F'; break;# K, Y/ ^2 ~" b- K7 D. y
   }5 T, x3 _% w: |  N
  str[n]='\0';# ?+ d! v3 n; Z2 ~6 B) w
  return *this;
/ a% E2 m* T9 R) n* M. j& N4 `}9 {3 y% D3 e& c2 d: G( k" A
int String::get()//输入一个字符串8 n9 Q/ H- Y: W
{# o0 b5 n' F8 r0 j6 _7 U5 i# |8 R9 c
char tmp[40000];+ g* `9 f3 W6 k3 y1 Y1 x
in&gt;&gt;tmp;1 \, a0 s* l" B9 B) L8 b
delete[] str;
7 |- o' Q2 s" `" y5 o size=strlen(tmp)+1;$ n2 o: Y- l. v7 t- Z
str=new char[size];# Y1 s0 Q" `, N8 E1 T, c% X! z
if(str==0)* m0 S, R+ Q& i, E, |$ R
  throw "error";
" g  z, U1 ~) ?0 f& v; m strcpy(str,tmp);
5 R9 ]$ f$ F+ u6 k9 L0 S return size-1;& Q% a: i' _$ K# W
}</P>$ t/ E$ O* Z8 a" G
<>void String::get(int *p)//将字符串改成整型数组
3 V5 G) L- S+ \  l2 w' R1 Z8 ~9 O{4 \; |) I# l& a) p8 x+ e4 C
int i,j;5 [  `" ?( g$ G! D9 @. B3 ]
for(i=0,j=size-2;j&gt;=0;i++,j--)
  ~% U: L  Z2 d& C8 W  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')" _" C- K. [1 r- T1 |8 C+ R" \
      p=str[j]-48;
9 |9 Q  y( M, E4 g6 P- q. x/ j  else& W+ l/ U, L0 @9 a4 ~
  {
6 O5 o: j; Q5 }6 B3 H   switch(str[j])' v& K! M. a2 _% i
   {
% f( w' z' Y" Y, y       case 'A': p=10; break;: T7 V2 B: t- y
    case 'B': p=11; break;- O3 _4 Y; U  G8 j  l. @( H& w5 M4 P
    case 'C': p=12; break;$ M/ a1 T/ G8 Q# O" i0 ]
       case 'D': p=13; break;+ \& f' e' ^: u# n2 b
    case 'E': p=14; break;% J# `8 F. C7 @
    case 'F': p=15; break;
8 q& ?$ Q" x9 b. V% p   }4 B6 t$ j# c' ]* K& i1 q; `
  }
0 c0 k& I/ {6 |4 g}</P>
. [0 w' n9 m! d# l<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
/ N9 z/ F9 p5 L$ i* E. F{; m. D; [' b3 l4 f5 h
int i,j,a=0;3 W8 Q( D/ }9 y* s1 t1 k9 [9 y. K
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
: O5 Q' k- \2 r# S {8 F. j! ~8 g1 B7 k+ W  @9 o4 U+ O# U5 Q
     c=p+p[j]+a;
) `) l5 q& M0 C& X. F- Z6 ^) k5 u  a=0;
  L# T$ i, A) L  if(c&gt;=k)
3 m# L, O0 c) `  {
& E  z( {0 \, p2 F& N7 X   a=c/k;; X; R7 k" k6 t! t) v/ {& E
   c=c%k;1 _0 c  {  U5 V0 H; n
  }
- x" Y6 X8 R* F9 x  Q. m# T } ; a, z1 b! ~: ^
if(a!=0)
* k" i) A; ~; u: V3 [  V- T {/ y# J" `3 U: O8 g, U
  c=a;0 s3 @! n3 j  Y5 X" t5 g4 E
  m++;
& T0 N8 O+ ^8 u9 W& R& { }
% M% G# ]5 B) F  q' c# x}</P>/ y1 `) n  x0 i+ p: U
<>bool match(int *a,int n)//判断是否为回文数
# }! a5 d1 b; [/ ^7 k{$ `( [1 i" @- v
int i,j,h=0;0 J) n; U! n+ r' S* m( B
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--); z. y  _$ @1 d! T# O
{" @2 u; N& K2 N- ^) ~$ v  L
  if(a==a[j])
" X6 h5 y* R3 N/ n! u) G# l. L   continue;
. `- A; g, z* ^7 n+ @7 y7 q        h=1;' h% q, D) R  ]. E3 D; R# w: i4 F
  break;# Q2 ?: Q( l0 f
}2 W# W- ]% b0 }: i1 H7 e6 e
if(h==0)
; F7 V: A# L/ Y2 K$ @+ A+ f) B) J  return true;2 |+ n; J* U( ~4 [. L) I/ I
else 5 ?& U' j. b5 [/ E6 `
  return false;3 A2 u) W% |' v) [
}  R6 g" k: }3 q$ k3 V# u" y
//clock_t start,finish;) n2 v! x0 X& d. |8 b! P% K; o
int main()( \, Q' W7 e9 k8 f4 x+ K2 [
{//start=clock();+ x1 A9 z/ u; c' `
if(in.fail())/ Y: J( w* [, i# N9 y+ k
{- z7 l+ `$ ^' _' g$ b
  cout&lt;&lt;"the input.txt is not exist!";+ H) z2 S# Q# \3 Q
  exit(1);
% x( Q5 P% ~. U: k }
& Y) E" u0 }! A2 u- q String s,s1;3 [$ X0 O* I# l+ j; A6 Z7 z- O
int n,g,k,*a,*c,m,h=0;
) |3 r2 ]- O! M5 u/ b    in&gt;&gt;k&gt;&gt;g; 5 M) j4 U4 b/ u0 X9 g
    s.get();
: N% r; g+ {7 ]$ ~$ i, w
) y- k, H) E9 U) E( L) O  ]7 O4 m. O    n=s.length();7 W. n$ P( z6 ~( a
m=n+g+1;  {' o' ^3 A# \
a=new int[m];7 B6 Y. b: y5 o$ i% H9 G, g8 ?; N
c=new int[m];
1 O/ W9 f3 J4 p0 L8 O' E+ O s.get(a);
$ R- I$ j/ h! p/ S- G( |  O* m if(match(a,n))2 o! g4 L* ]! O2 L2 p% ^" U4 Y: z+ Y8 ^
{9 e2 N. z" E- C3 W* i# V
  out&lt;&lt;0&lt;&lt;endl;: ^$ ~! \1 j2 ?
  s.display();
; @9 |4 K- g: C$ d, ^) Z  return 1;) l8 T4 o( }5 Y2 o
}
: {% Z; l. O' B" c, @# F5 k" P+ A; f7 N do. s4 U5 w- q% J
{/ y! i9 p( Q/ A) N1 G4 |
     if(h%2==0)+ h( v' U% c, k! |' H; N
      add(a,n,c,k);& Z; E- T! B* }- }
  else
' N5 }% |$ @4 F  @   add(c,n,a,k);
" n! m0 l5 d' p5 ~5 X  h++;
: B! w  }' i: s& @  if(h&gt;g)
" z" w2 c1 w3 J8 b1 y" g   break;; H9 a. |# F2 e$ w, K* U8 y0 E% c8 N7 H
}9 h$ @/ i0 W: @& J+ \- |$ o+ `
while(!match(a,n)&amp;&amp;!match(c,n));
' T6 L2 z  a1 u$ r0 z* ~ if(h&gt;g)
4 A% Z5 |6 F1 p$ |* r3 Z     out&lt;&lt;"No Solution!"&lt;&lt;endl;
. ~" v/ D0 A  E/ ?2 L else) ~! g# n5 H$ V) R8 @5 S7 j
{
: B" P2 _2 s) v) ^      out&lt;&lt;h&lt;&lt;endl;& k3 `7 H) u3 N* K* v0 J' @
     if(h%2==0)5 f  h1 q4 k7 g8 F
      s1.change(a,n);9 t0 c; H1 A6 X8 ~$ \
     else
" g1 j) \& [( X      s1.change(c,n);
6 R+ N0 k( r( k, @' u1 p; X* _0 ]     s1.display();, _( W) G9 D1 P' R' Z  d4 N2 M+ y
}
( X: }/ V. n- G  z# E8 @3 o- A delete[] a;
2 T% w/ i8 Z: Q; P0 v; } delete[] c;# M# n3 P* F% u0 r; D0 ?
// finish=clock();
% C" ?7 P! r8 O" s7 h% C// cout&lt;&lt;finish-start&lt;&lt;endl;
7 P( l! ^  b) I return 1;
; m7 _: |& I- p) R; v8 a}</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-7-19 16:58 , Processed in 0.601905 second(s), 110 queries .

回顶部