QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
. C9 v: o* H/ w3 i4 Q6 `#include&lt;fstream&gt;
' D8 B5 o$ ]5 D#include"string.h"
2 Y8 R) a7 z& T3 _//#include"time.h"8 z  q$ I+ A8 H3 L' W% i9 H' N, g6 a
using namespace std;/ z1 @! _/ q4 ?8 e$ L5 o
ifstream in("input.txt");$ P1 i! T* y% K' B2 S0 G- y/ _6 F8 o
ofstream out("output.txt"); 8 J* }+ f# N2 D5 f, F
class String
! ^$ k/ K* I5 `{
; n. ?" M6 a' M! r9 n4 Gpublic:! g9 i( F6 l2 a6 ^9 U/ ?
String(char *s="");
2 i& z& z. e* e5 C String(const String&amp; s);# v  }* ]5 q! b; |; k9 D" ]
~String() {delete[] str; delete[] pre;}" G8 v1 _" `) b) L- ^2 o* U
String&amp; operator=(const String&amp; s);
. Q: P4 M5 I& C& {. M% R int length()const {return size-1;}& H1 m( O0 {3 T8 O
int get();& S0 x) g7 V3 {3 ]- `  Q; E3 S
String&amp; change(int *p,int n);5 K1 w& M! H5 S2 w
void get(int *p);
* j$ V. j) b! p% ?7 v9 w! H void display(){out&lt;&lt;str&lt;&lt;endl;}# \% ^3 U6 R" P/ j
private:
" d3 u8 A. W' Z7 ^$ | char *str;! b0 F0 d, l! `. ^1 ^  w% d
    int  *pre;, W2 x3 N5 _/ d, W; j3 a5 D0 \
int  size;
/ F, m$ ^# F# W0 u6 M, b};</P>
- e* V( d: [1 @9 J  i9 F7 G; p<>String::String(char *s): l" O2 m) U* G! i3 ]6 R) D
{
4 |5 t4 W% t8 c; J size=strlen(s)+1;0 T6 K! u7 L; A2 P( b. R
str=new char[size];
6 H% X6 ^9 i9 A if(str==0)  throw "error";+ s& `' Z, m3 L* Z$ I- I
strcpy(str,s);
- j9 o. Y6 [: S7 a/ t: A% w pre=new int[size];
/ l4 n: t" y# s  `7 ^  E8 I if(pre==0)  throw "error";
+ `+ Q8 w* B) f& y4 S/ `  E}</P>
' R( f% j' }5 g9 w* i<>String::String(const String&amp;s). Y/ Q  E, }, q3 ^& y/ Y: G; [) z$ ]
{: r1 `. g6 H/ C4 U& @8 l
size=s.size;' O" j' H3 Z, Q# {  H9 g
str=new char[size];+ P! o# E& {% z2 o( q
if(str==0) throw "error";* P' a- X( g' I  ~3 H9 P% x
strcpy(str,s.str);
. i' V! w; t( X* }) E pre=new int[size];" D/ c8 r* k# c: J
if(pre==0) throw "error";
/ k1 }9 M6 f- f; Q$ M" C! F! k}</P>
  ~. Y8 D4 S% p8 q6 I- Y0 {<>String&amp; String:perator=(const String&amp; s)
1 P7 ]* U! }& m$ u* j{) A0 E3 V6 a2 f) w$ z
if(s.size!=size)
* r: l! G0 T( ]7 y% N8 P; `) b4 s+ A {% i' ]+ h- X) u) I
  delete[] str;+ a' f. v) S- x8 C
  str=new char[s.size];+ O; i$ C) H$ n; w
  if(str==0)
* l% B8 }. j4 a   throw "error";; p& w% M  u# H: M5 O1 z; I
  size=s.size;
- J% ]! w1 U, }  s% d }
1 L# u/ t! b7 P5 t strcpy(str,s.str);
! L$ d! i! s7 |9 {! e% g; w' _% l, [9 L return *this;6 c$ W) [, L% l) Q' T
}</P>
0 e) g3 U; t/ Y5 b' f# N" p3 v<>String&amp; String::change(int *p,int n)//将整型数组改成字符串
, ~0 p4 i% K) W{
9 x9 z& W% I7 d( p int i;1 I& H4 r( s1 A7 M2 j
delete[] str;# b" t/ g7 A6 F- q' q7 u+ L
str=new char[n+1];
$ E, ^* l- F2 K; M, m; X, X for(i=0;i&lt;n;i++)1 E# ]3 S5 q8 G/ W
  if(p&gt;=0&amp;&amp;p&lt;=9)
+ N1 r! v1 H7 j0 H7 H: x   str=p+48;/ e8 r3 k7 M+ P! A; m3 `
  else! ^( z2 J% U8 K9 C# S0 |* f- \
   switch(p). A! n. |4 j6 r+ m
   {
9 D! |6 `) i+ L/ w1 I( U- }5 u       case 10: str='A'; break;0 w, \7 M8 U: J/ k, G
    case 11: str='B'; break;
1 j0 G" H6 r6 o! t8 O0 `+ i    case 12: str='C'; break;0 k4 m9 ^! l& l% N
       case 13: str='D'; break;
3 c9 W- K" R; O8 ^    case 14: str='E'; break;
0 J: F: N: A$ n% J% E5 M    case 15: str='F'; break;
! b9 ^! L( K  q6 Y7 f   }6 U3 b, n  s' F9 R5 p4 l
  str[n]='\0';
, A% U( f& k; P, h1 d% i: N  return *this;
; u/ N6 [/ P2 F9 C: P. s: f1 }* A; p}
' p& l. O, Y2 xint String::get()//输入一个字符串
3 k+ v% Q" _( y" T) _: T$ T{+ n' X* W5 f- m
char tmp[40000];
2 C4 S3 P2 w1 a: s/ N in&gt;&gt;tmp;2 V/ ~' x$ ~, Q* D( I
delete[] str;
# F! g' ^- e# U) e. T; x: C% E2 o size=strlen(tmp)+1;5 h+ m8 P9 K/ k0 `3 e: k' e& t  _  P
str=new char[size];' K+ B& D$ g7 C2 q3 @# F/ T
if(str==0)
5 Q! }2 h, I' F- Q. y1 [2 b  throw "error";
7 `% ]9 |5 c9 F: o  S strcpy(str,tmp);& _% g3 t6 P# p+ }) r7 w
return size-1;
" j% F% C# r* s' J5 B}</P>8 j- L/ ~3 J" B% ~, \" S7 S
<>void String::get(int *p)//将字符串改成整型数组
& C% A, F* P1 P$ {{
! Q, A7 l5 C! [& @ int i,j;
2 y% b6 `0 E1 f3 N8 `& \1 n1 D5 ^ for(i=0,j=size-2;j&gt;=0;i++,j--)* j, v: P& a* O3 q3 s2 c( Y- u
  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')5 v5 D/ y" w9 @( z+ Y
      p=str[j]-48;. t" @$ e/ O# l) t$ s
  else6 v, t. b9 G( t. b: ?5 z
  {
+ o* Y' ]. p( j* R   switch(str[j])
  N2 F& z: ]4 J6 R9 m- n3 N' @* w   {
* Q5 o0 u, t( z3 Y7 ~       case 'A': p=10; break;
( S6 K# A: F( q    case 'B': p=11; break;
4 b' k; l* Z( s. Z& J" C9 D    case 'C': p=12; break;6 W9 D/ R/ s; ?; X
       case 'D': p=13; break;
& H: M' ~: W' _; t. {2 E/ I) {    case 'E': p=14; break;
9 ]% |$ S) J* o( f9 \! S    case 'F': p=15; break;
3 D* K% w- P- t   }9 c) b  _0 E( @8 t2 t* u: L6 }: a
  }
2 B- t0 F( x, y6 l$ N, B}</P>) F: _3 {" F& c+ m6 g
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加* |7 ^1 ^# P2 t( z  X
{
/ W; i4 W, l1 p  t' R" h int i,j,a=0;2 D6 K0 C# C% h1 `( G
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
" t* n) k) g% i) {) ^" [ {
9 Q5 B! e! ^/ \0 u- }  W! y  M1 T     c=p+p[j]+a;
; U7 h; j& B% y( i0 y) f9 {+ S  a=0;
4 D) A2 U9 {5 f$ P; R  if(c&gt;=k)
2 l6 B7 L1 R# r4 Y% d$ `3 u  {
+ m! a. d, f: H6 q4 N; j+ i+ K   a=c/k;
* }3 ~. f7 P. _   c=c%k;& l0 s8 m! N5 ~- o9 p1 R
  }8 b1 G( ~- o: B! ]5 y5 A) c
}
# _3 i( |/ S+ S9 m/ k# o if(a!=0)
, s+ ~- O% j  l& H/ U% Q8 m {
! H. a0 I$ _/ w2 C8 w  c=a;
4 M8 C& z4 f" M* u. }9 h  m++;
6 O; h+ }$ P4 w  e* ? }2 d. Y( V. d# V: ^( f0 N8 Z8 l  s
}</P>
7 o7 ?# w* |4 j<>bool match(int *a,int n)//判断是否为回文数9 L( o! r# J2 }/ h! L, v
{! q( q& d1 p9 {, |# h1 X7 H
int i,j,h=0;+ ?" B) B* h" a* ~% I
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
4 H' S, p; H8 D# Q {' F+ N. [2 \/ \$ u
  if(a==a[j])& f3 |' D4 E9 X0 L8 ]
   continue;: I( T+ b8 g. n( x3 U1 _6 V! {: \
        h=1;
% S, |% [+ T% g4 H" f  break;
) P: E& n  O6 Q. J8 _ }: [2 f& H7 f+ ]; W( G. f  Q4 h
if(h==0)
0 K$ j- n0 L) J  return true;
8 T: o9 ~3 l: J5 d else
$ h( t0 C4 W3 [  return false;! w* C" F" [2 H* a7 `6 k
}
# T+ T# ]* c5 n6 ]& s4 O- l. V//clock_t start,finish;
9 s; [& \- c$ cint main()
* k9 }4 ^5 T8 y- \" Z{//start=clock();* }3 k9 Z- e: F& H
if(in.fail())
6 I6 Y) Y2 K/ j {# Y8 l0 z( P' q- V& o* C" A' g
  cout&lt;&lt;"the input.txt is not exist!";5 s' K% v0 S: g% j( w% J4 M
  exit(1);& U6 C5 M; z5 j$ [6 R- X! ]
}7 z" _; F; X' K* p) L3 b  |
String s,s1;! U* L! D! R& j5 ]2 D1 X
int n,g,k,*a,*c,m,h=0;
1 _8 _: B- q( [; Z+ ^. L    in&gt;&gt;k&gt;&gt;g;
" O, x% l/ ]0 B8 [, i! q! P6 o    s.get();
2 f0 L% i0 h( v6 J( f % x) o+ k3 j) c, n4 Q- @) l/ S
    n=s.length();
6 w( g6 A, {: e4 A m=n+g+1;
7 U/ f5 t4 Y2 q/ o$ R5 _+ v a=new int[m];
  S6 t4 o4 w2 Q, f: d) b8 N c=new int[m];
) m. B' g. b7 c s.get(a);2 v( q* M8 _3 T, Z2 X
if(match(a,n))
" N* r; h6 G- D, ?6 Y) Y {
3 |( ^; L# E; P& u/ ]  out&lt;&lt;0&lt;&lt;endl;% n0 [" S9 ?) p! p  }
  s.display();2 `: w5 M. v$ E& w  C
  return 1;+ z' _8 ^0 w6 g' A- s# C
}% M& r6 `+ J" o! |6 `: @
do
9 f  T; |5 b$ L" ^# O' z( z {
2 c% w; [" y" L     if(h%2==0)6 v+ Q! i/ B& a# b. N. n
      add(a,n,c,k);" l  I( l4 l' e# |8 f
  else3 a! T/ k2 S; ~) Q( \% b6 j
   add(c,n,a,k);
' c+ E& R* N8 `, F  h++;
- K: o2 H# e4 h( g' v( T4 P  if(h&gt;g)
( J5 |' e6 F! L, x8 X: o+ B   break;* h. ^$ ]; y& R2 j# A# h
}1 P& r3 y$ b- P9 h! F
while(!match(a,n)&amp;&amp;!match(c,n));
4 N4 W+ {% c5 x* M if(h&gt;g)2 ?5 v- C/ K& }$ A& G2 F
     out&lt;&lt;"No Solution!"&lt;&lt;endl;" g0 K1 M7 a9 @
else. [, z8 M6 Z/ I7 {/ n9 V* D
{
2 _, M) t- I& P6 X/ f      out&lt;&lt;h&lt;&lt;endl;
5 w9 D' N' @9 q7 T3 g3 M! {, U; a     if(h%2==0)/ a7 c# s5 y' p6 [; T* }
      s1.change(a,n);
. g3 N$ Q- ?9 C     else
- g6 `6 s: y( w- _6 c7 D1 P      s1.change(c,n);8 O& Y' H: R% y( Y  Y4 T! D( G0 x
     s1.display();" [$ U& X) s2 ?
}
* t, p& K5 {6 J9 e( H' E delete[] a;
  G0 a$ o. `& v( I- q delete[] c;  f. M- ~6 @, Y8 V
// finish=clock();+ x( T9 m" h! P& C
// cout&lt;&lt;finish-start&lt;&lt;endl;
5 G4 q. c7 t1 G2 ~2 [  u1 Y. k return 1;
, b/ X' X& x3 m* N- c6 ~3 r/ z}</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-20 05:44 , Processed in 1.029894 second(s), 109 queries .

回顶部