QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;, {, [' {+ O/ b7 K# T" }& m% ]
#include&lt;fstream&gt;3 ~+ h$ _( \8 X1 f& K; ?1 N. E0 x
#include"string.h"
5 g8 c+ v  s, n& v//#include"time.h"7 x, M* b; ]) g7 E/ q# P
using namespace std;- P  R& U1 c: J! X
ifstream in("input.txt");6 F8 B* I$ ~! p, |- q0 r* h
ofstream out("output.txt");
4 ^2 R4 W. R+ \class String
. @9 d$ B# \# {7 O7 o{! N6 a4 h. i7 I
public:
7 f5 Q- L- r$ I+ M: i String(char *s="");' d+ ~6 `+ L, ?' X2 g/ y
String(const String&amp; s);! e3 w7 B/ b2 R+ P) }3 y+ f% W
~String() {delete[] str; delete[] pre;}2 a# ?$ k" {/ f7 A8 x- D
String&amp; operator=(const String&amp; s);
8 C" r3 u% Q( y int length()const {return size-1;}! [* H) t8 O4 h
int get();
" W; n; ~4 s% b. \1 Q String&amp; change(int *p,int n);
- F1 D6 q$ w2 f! e) x' R# K5 H* c void get(int *p);
1 I( b! W4 U) c3 C, c void display(){out&lt;&lt;str&lt;&lt;endl;}
( d6 @, j" Z  ]private:
# S9 c8 [. E" }3 a$ }. K7 L, @ char *str;
3 Y( q) U- w; w2 K3 v5 w    int  *pre;
, V6 z& N1 t9 s6 P: ? int  size;  R; [! g/ I3 C. @. a9 c& o
};</P>" C  h  V1 U. H+ q* J
<>String::String(char *s)/ {& T5 v  B4 t+ _
{
& n2 Y% {# h* l# P/ q/ B% J+ Z7 Z size=strlen(s)+1;* U7 Z' L" u9 n$ R' ?$ y: {
str=new char[size];8 M! ~2 y6 }1 H2 {4 h! k
if(str==0)  throw "error";5 Y3 `3 i; m1 {- s2 f
strcpy(str,s);0 R6 k9 I0 ~3 ~4 A7 j# D
pre=new int[size];
- U- J8 m  a! n! {7 r. O if(pre==0)  throw "error";
: B% P4 }! _* @( C}</P>. W) n6 m4 v8 Q9 Y9 i! X7 ]
<>String::String(const String&amp;s). V  O$ P; r5 v) o1 x. \
{, ?5 z: l( b7 m9 w5 A* I
size=s.size;
# {+ C7 G$ S3 @. A: Y str=new char[size];+ b- X  ^% C% H1 Z4 v! }
if(str==0) throw "error";6 g! F/ B$ x9 n& T0 Q3 z# D
strcpy(str,s.str);
# a( V5 }+ P: e6 E) ~0 y pre=new int[size];& O3 ^: e  N% w
if(pre==0) throw "error";" O& A" A7 |. X( r' I* B) T
}</P>
; J- r) t' _2 A+ \& r<>String&amp; String:perator=(const String&amp; s)
1 u" ]* k3 c3 i1 t{
! F( V7 K% F  I) @; p if(s.size!=size); J" v1 v0 A# P5 l; d
{* D( A, M+ s& Z) g' ]; M* D
  delete[] str;' a% r5 j7 \7 ]9 s
  str=new char[s.size];. }) ]# q$ N( C1 m1 r# L
  if(str==0)$ A: v  W1 ~, S+ B
   throw "error";  Y4 Z! I5 a( e6 L
  size=s.size;
! S! y3 n) Q* i& i; u }
4 }) j3 g$ S; n; Q/ I( @: |# q5 k strcpy(str,s.str);; w6 U  r: o, q* C% s* y! y
return *this;3 @% T/ S% k0 i/ Z# N9 X0 F
}</P>
- r+ ^5 x7 @4 d) K- S<>String&amp; String::change(int *p,int n)//将整型数组改成字符串% q2 x$ m2 @5 D+ i7 a+ F+ ]
{
- y' w% l  t% d' Q( D int i;) @8 A8 n) N5 b: I- q3 {3 l; D
delete[] str;
2 U% {( [( ^6 s; y/ [/ Z str=new char[n+1];
) k. U5 }3 i/ a' a4 l for(i=0;i&lt;n;i++)% V- Y+ @# Y; \1 j
  if(p&gt;=0&amp;&amp;p&lt;=9)1 E" A2 N8 b7 j4 M0 U" ]$ ]0 D- q
   str=p+48;
$ u. I4 y3 l/ s& _$ H$ o  else
. _& H% e# c6 _( S9 e   switch(p); `, |% w" x2 L$ Y7 |$ _+ q
   {- [$ r: e! u6 E8 B4 h' Q
       case 10: str='A'; break;
& `) t" i- P7 g: ]$ }    case 11: str='B'; break;5 d+ b" Y; Z! H. }" D, e* ^
    case 12: str='C'; break;
# o4 ^* Z6 G$ R: E       case 13: str='D'; break;: q/ v( x) d' d/ n) I
    case 14: str='E'; break;4 z/ @  p3 B* _& L6 K2 u
    case 15: str='F'; break;
/ X, n$ I. o2 h5 @( `   }
6 w2 c" E# q! E+ \) A  str[n]='\0';
9 z3 ?& r8 g1 G$ m+ f- j  return *this;
, w- z+ [! O- U& K}4 ^, A) K3 Y  L1 u6 U% {
int String::get()//输入一个字符串5 K2 [: O/ P" J* ?0 P7 n, s
{7 t7 p5 @2 Z# S0 G+ K
char tmp[40000];
7 \, C( s6 u- _, d! ^3 F8 k  {' M  _ in&gt;&gt;tmp;" M/ f: U# U+ ^. I$ Y
delete[] str;+ d* {" g" @9 ]; l# }7 }2 R
size=strlen(tmp)+1;
# x0 L9 |. i+ w1 y str=new char[size];
6 A3 j# Q3 |/ x) V& ?6 z; J' u if(str==0). \% O1 |/ h/ E; Q5 Y6 h
  throw "error";
; \5 A' a& g2 C; H4 S; ]/ g strcpy(str,tmp);6 J  K- M5 n% R1 \1 Z$ p# Y- {
return size-1;
  c3 j3 |9 _( S  h2 j# @}</P>' f- Q; v! O' G+ p' ]
<>void String::get(int *p)//将字符串改成整型数组2 V: S2 G0 L6 _6 k$ h1 [
{3 T0 c. H/ A" o( O4 a$ O
int i,j;6 |! J6 v7 Y1 N5 [6 M# [
for(i=0,j=size-2;j&gt;=0;i++,j--)
& N$ U/ x* l7 ]# f3 ^& V5 j  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')4 b2 y3 J6 o6 C
      p=str[j]-48;; G4 t, G% e" U+ `! S4 G
  else
+ i3 F' \$ Q" B2 R- P2 M+ u$ ~  {: ]$ K) U% C3 k
   switch(str[j])
6 I8 y4 S, L- S. {7 C   {
5 {, X4 p6 o6 a" E- A8 t       case 'A': p=10; break;# s# s2 A; l: \+ W( Y% D& ?. t( f2 q
    case 'B': p=11; break;
  a$ z  u- G! P3 O, \    case 'C': p=12; break;
6 h+ P: d$ W2 W5 _& M% D& M       case 'D': p=13; break;
& U! ]' M" `1 s) _& }9 N9 R    case 'E': p=14; break;" @7 t7 Z, g' |. }
    case 'F': p=15; break;. m2 ^8 V) o3 P1 K2 C1 N
   }$ d7 p1 u6 o: A( o, F; ]
  }1 Y# l! e9 B0 o4 H( C: B. t% p2 y
}</P>
, ]" `& J' w- l- {6 D. Z<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加: C* Q5 K7 C6 t2 [, J+ Q$ X7 R
{
  i" k  s' ~8 a# y3 W" y int i,j,a=0;
4 I5 H2 \9 ~# M0 }( w    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
0 s& q7 U2 z1 a1 g" _ {
$ w# J+ _3 b% i2 u3 [0 W9 K4 e2 c     c=p+p[j]+a;
$ T- I: z; v8 W$ Z) r$ }" v7 q  a=0;
8 p( z3 J1 I: _+ z" ?' [0 t  if(c&gt;=k)
" Q6 q$ h' ?" o1 L8 T) i- X  {! N- `8 S1 o$ Z
   a=c/k;
( E  _, `( t7 t9 j0 Z# K1 k   c=c%k;
  O! u, n1 T6 j, T$ k  }2 k7 t$ M/ r, D. ]
} . z. u! t* _2 Q# b# t2 u, A- q
if(a!=0)1 W3 w; s) D8 k0 |0 x, @
{/ `1 H+ R2 n* `7 p# Y$ C$ Q: Z
  c=a;
, G  ?$ j" b7 M# B7 G1 n  m++;
4 m+ h  T  P! s8 N  U3 s' D }
7 ]/ ^, L2 _8 G; Y; m}</P>
+ o+ J/ R; ]( E! ?6 u5 V; ^<>bool match(int *a,int n)//判断是否为回文数
# m4 B9 V2 g+ P& {0 }{
; q" n. ]+ }2 C# Y7 W6 U; M+ V int i,j,h=0;
: g& F8 X: v9 \% V% L for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
* p' Q( T  ~* q. f {
6 T4 V* o4 b3 N9 W1 E  if(a==a[j])/ L" m% E, ~7 ^
   continue;
# I! ^- v5 M( Y0 q& g4 H1 n# S        h=1;, m9 B/ K$ B8 Y0 i
  break;
7 i) k: r% U5 Z9 G3 A }/ c; S, Y5 r) v
if(h==0)
$ B' m' [, z& o% J7 C* X0 H  return true;
: C4 _+ ~; b1 F) e" c5 e3 b else
6 ?8 o' t0 ~. Y# i! t  return false;
) B0 P7 e3 o# o- i}
# ~5 l4 p% n; ^5 x, d& ]//clock_t start,finish;' _% c' T9 }/ q0 O3 m# `$ A
int main()3 j4 f1 H0 a2 j5 c# a, d& p8 |" O
{//start=clock();# V) L) j- y4 v
if(in.fail())
8 n% G  H1 i) s" q2 x, t {
8 Z! f) z/ [4 a  cout&lt;&lt;"the input.txt is not exist!";+ p/ J* @& q1 \7 ~1 Y, ^  x
  exit(1);
5 }$ r* ~( T  D }5 z+ Y/ p0 X* P. K: q4 N
String s,s1;- O% X3 Z3 M( N4 S9 Z0 I) B- O% v
int n,g,k,*a,*c,m,h=0;
- }0 q7 {! q0 n7 N- c( m7 F* v2 H3 r    in&gt;&gt;k&gt;&gt;g;
9 [) S( h) l2 V; Y0 y' @7 A" F    s.get();$ @# v: X: p, w0 [9 Y% I! c

7 \+ }* \) u. [8 ~7 u; I    n=s.length();' D8 v$ c5 B$ w4 G
m=n+g+1;
1 }4 X4 M) W& F, X% _9 U a=new int[m];2 F! p7 f! o# Y- h* u; {1 O
c=new int[m];2 Q" {) I2 f8 }. k
s.get(a);/ e6 k& S  D) k' P
if(match(a,n))  t; J8 a$ P4 p* h: F4 Q7 R" u( w7 H1 T
{* n% e" Y2 i1 H% }
  out&lt;&lt;0&lt;&lt;endl;% ^2 p3 _( @3 V% ?, F7 c3 A2 p  a
  s.display();
# t  P, u, u/ e: l' m" D; b  return 1;  H8 D$ c: [; D  n
}/ i$ x, b2 c9 R: d5 m- x  }( h; t
do
( ]# b4 X' x2 k4 V, t' j {
( Z* e5 j" ]" C0 t" e6 j# A$ m     if(h%2==0)* p5 a* T3 u7 a" {
      add(a,n,c,k);
! _4 y8 z: t0 m6 C: e  P1 r: V  else
; w" h/ {' Y" v( C7 r* @& m   add(c,n,a,k);
2 J+ f- z! T" V  h++;; [8 z3 D+ b. [! r+ ^3 ~' M6 O- T
  if(h&gt;g)2 {: R6 t1 r! L# o; f8 `! B
   break;
8 w  k5 h9 |! W) f( z5 f  l }' U2 s$ }* l: o! v3 j( `; g
while(!match(a,n)&amp;&amp;!match(c,n));
6 C; u% }; k# W! h) |7 B3 ? if(h&gt;g)% D: o& q- |$ W
     out&lt;&lt;"No Solution!"&lt;&lt;endl;# |) ^/ T  O0 T! S0 A
else% ]  s3 T  I: e3 p! T
{$ m3 ]1 C) a4 y5 [8 q2 k0 q+ h
      out&lt;&lt;h&lt;&lt;endl;& b0 v" G# H: z
     if(h%2==0)6 f. m8 b$ O  z; Z8 D& A
      s1.change(a,n);$ C# Z0 S/ p9 |! A/ h# I# u
     else
$ V7 Y% [5 k- ?  u      s1.change(c,n);, {) P( n* ]$ Z6 k0 @! D- e6 H, q
     s1.display();
: H# P- a  a1 d2 {! ^" M. X6 U }
' I% a# ^# l2 q+ Y! P& ^ delete[] a;
3 c+ K  |2 u: o* D delete[] c;) [: T" [% W2 S4 _! v4 Y
// finish=clock();
( h$ h' G3 U. ~" v' I( P// cout&lt;&lt;finish-start&lt;&lt;endl;. `" d* P6 x1 _5 P
return 1;
* ?+ E6 V  W- J* g5 _# 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-4-18 08:29 , Processed in 0.514761 second(s), 110 queries .

回顶部