QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;9 X- r: \! \7 r$ _
#include&lt;fstream&gt;# s" w2 `2 B; ~" L* g
#include"string.h"
0 |4 C- K: L: q  c7 |6 S) K# h' k//#include"time.h"
. ^" z, b7 j. v% R) d" `. iusing namespace std;
' x( D# y3 k0 x8 }ifstream in("input.txt");
, P$ V) N; W* U; U. Pofstream out("output.txt");
2 g2 s1 X/ [4 j0 I0 R$ j7 eclass String . i( f- S" l: f  D. I. o4 J4 S5 Q
{5 b3 A8 O4 x3 y+ I9 ?) T, m
public:, j7 B6 [! H0 j( _0 _
String(char *s="");2 R$ ^+ R% N  O9 ]7 F( U5 M
String(const String&amp; s);
! K0 r  g3 D4 r0 l0 i ~String() {delete[] str; delete[] pre;}6 ~6 o, Z0 A  m6 I3 f
String&amp; operator=(const String&amp; s);3 M) [8 C% F7 R* [/ Q; ]% l
int length()const {return size-1;}
" d, [* v4 A  Y. ` int get();: q! _" R/ [: |8 E) Z1 d1 K( o! [
String&amp; change(int *p,int n);
" m, j+ l1 z$ q8 m. r" T8 V7 m4 A void get(int *p);
# c3 \0 ?$ _) D! h3 s void display(){out&lt;&lt;str&lt;&lt;endl;}
, i6 F) L9 }* x+ a$ t% g6 e7 ~private:
! A6 B* e# E; }# q5 ? char *str;1 J' |  A4 N/ A5 A
    int  *pre;
0 {& d& d+ o$ g% ?( | int  size;8 {$ P+ H- ^) w0 J* W/ [
};</P>5 E4 S+ _- `/ U& ?
<>String::String(char *s)4 Y8 g# m- C+ K) M
{; S9 e0 t6 w) F8 @, f
size=strlen(s)+1;. B& q2 V$ W8 }, \5 J
str=new char[size];/ F. g# u# {% l$ [+ @; Q
if(str==0)  throw "error";
' r0 u/ H2 E& L% W2 k' B# H4 h strcpy(str,s);) D& @: A  W/ j
pre=new int[size];" V& _/ c7 }( U( L! b& s- z
if(pre==0)  throw "error";
1 Z4 g" c5 ^) y5 A! l* F}</P>
2 o7 f0 L+ b# ~7 z! r' z* ~<>String::String(const String&amp;s)
1 c7 W9 ^! d) I1 f* Y{! V; n. x- }- ?: P
size=s.size;
# ?5 ?$ G: ]/ T6 Z str=new char[size];
$ ~" Z2 f4 o: M; n& U% K if(str==0) throw "error";
0 i$ m; Q& C2 v0 w! h2 U6 }# ~- V strcpy(str,s.str);
+ c+ F- f! f0 b5 ] pre=new int[size];
4 C: V/ g+ q: M$ G: x if(pre==0) throw "error";2 _, q5 p& `' P& ?& s4 m
}</P>
" D: R/ Q8 A% [: ]# w<>String&amp; String:perator=(const String&amp; s)
& D$ t4 h7 a/ }6 W& u  M+ X{
2 ~! R8 Q: }6 \2 ^ if(s.size!=size)
, i( }3 Y. w' |9 P2 j {
# e, t5 l( \) }0 C  delete[] str;
! z9 }& J$ E( I  V  str=new char[s.size];6 p5 s1 I* j, s, l  a) j
  if(str==0)
3 q+ {8 i# u' C2 @1 n   throw "error";
7 c9 l8 d# X: [7 ^' M# w  size=s.size;
7 w( m$ l% Q  ?1 Q  c }+ j$ ?: r4 R1 y0 V, ]" W
strcpy(str,s.str);0 A  s4 c* B& Q: k( V/ |
return *this;7 Z# X& @$ h6 j. m" b( Q8 o! K
}</P>+ Q3 r: H7 b2 X4 u9 U7 t2 D5 l" Y$ @
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串+ G2 Z4 O0 `$ ]1 {) o$ K6 D
{8 o4 A5 }# I1 ]6 O- I1 ^* t) g
int i;
% }; f6 R. ?, e3 ?- G delete[] str;  V0 Z+ t7 v% S& |& r
str=new char[n+1];
5 p% O5 f( n; k. B' {. [( [; y for(i=0;i&lt;n;i++)
" ]$ s1 m. [/ ]1 l. S  if(p&gt;=0&amp;&amp;p&lt;=9)! ]& h# X/ K8 @* K) T" o1 w# U
   str=p+48;
+ ]! A  `: w! |1 o/ T) G! c  else3 U* n7 l* x4 h8 v- C* R6 ^' E
   switch(p)5 v& u  q) s2 m% }/ g
   {" t/ S' j) _. v
       case 10: str='A'; break;0 h, Q3 }# ~8 p; _! d3 k
    case 11: str='B'; break;
) \- l8 \' c2 b4 q5 J# A    case 12: str='C'; break;
0 D+ z5 w& |( u' ^% _       case 13: str='D'; break;* `( L7 M9 g8 f, @: `
    case 14: str='E'; break;% p: f8 f/ b% |* d
    case 15: str='F'; break;  b" g1 d- k% V, K
   }
$ h0 s3 Y) W0 E6 g3 s  str[n]='\0';" \3 ]. _: V0 L4 y. I! I
  return *this;8 ^+ m' \6 s- e, ?/ @1 ~$ A
}
: }' M2 A8 m5 g8 j% `: T  N; i) p0 A7 pint String::get()//输入一个字符串: U3 Y3 S' w) R1 I; |+ Y8 m; U) [
{2 x+ d0 c4 t- t* T. T5 z
char tmp[40000];  _# v3 C+ |1 m. @) D7 H, m1 f8 o' Q
in&gt;&gt;tmp;( ?( N& j5 ?; |5 y. N
delete[] str;) b6 N8 v4 s3 k  P
size=strlen(tmp)+1;7 f, N2 X' Y) k$ ^0 p8 y+ b
str=new char[size];
2 Y% P( t* ^) ~8 D) [' O9 `1 u8 Z" P if(str==0), P7 n- Z5 Z% M6 e0 l' H2 h
  throw "error";
+ p. D1 @% }* r4 U9 C strcpy(str,tmp);
8 c( z8 x6 K7 } return size-1;- n/ T$ F9 N/ C; R
}</P>
! _# V  V& ?$ w  Z$ d+ x6 B<>void String::get(int *p)//将字符串改成整型数组
3 L* q3 p; W' u* j1 `{  _; h4 T2 T3 w6 Q
int i,j;& k8 d6 Q* c, Y& Z
for(i=0,j=size-2;j&gt;=0;i++,j--)
; K' z) G$ k9 s* d  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
4 f0 |3 C5 d" _* K- a8 U$ E) j6 n& u      p=str[j]-48;7 G& [  Z  d4 f5 O7 K
  else7 ^5 a! P. j& }: }
  {1 H6 Q- y& E( X  K6 Y6 E
   switch(str[j])
# \: Q" v2 M' v. v; _   {
8 _, P5 W$ M  ?) z% J8 f. r2 ]& g: G       case 'A': p=10; break;
# Y8 u7 g4 r5 z- [. ^    case 'B': p=11; break;& Y0 \; T6 y7 R, n4 M
    case 'C': p=12; break;
/ D' t3 Z) S7 A! r( Q1 j       case 'D': p=13; break;
! q* h3 [$ {9 ]: n# i. Q$ a    case 'E': p=14; break;
5 e( ~2 M; T8 U3 H& I+ Z    case 'F': p=15; break;
0 D) H. f' \$ T- t   }) r. c& p( W4 F' d" u
  }
0 O: U  ], d0 y7 g' I}</P>  W' N, b' `9 I! b1 j
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加" u& r  r1 k0 M
{
4 Z. T& w5 q8 B& U5 P1 { int i,j,a=0;+ r; t7 s8 n3 I' c
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
+ ^, P/ W# m: X4 ^% N# ?! N6 ?% M {
3 k9 @; U0 R: A- A. f5 L& M     c=p+p[j]+a;9 u/ Y6 y- B1 A) S
  a=0;
- G. ?( a6 b1 K$ U4 L0 J  if(c&gt;=k)
4 P, j) v$ g3 F2 M' G. O  {& N4 V  y7 V1 P9 G, X& _- S* I! D
   a=c/k;
6 m2 c  `# \2 Q: _   c=c%k;" [- E1 V, e2 z
  }7 T7 U& f1 I) r: a
}
6 p; e# ?9 l+ ]1 m/ ~# W if(a!=0)
; I& H. K1 y% ~2 b$ [% R0 C* {' K8 H {
- F' e: Z0 F" R" S6 e5 U, y# L. G  c=a;
1 D6 O, i  u0 ], g: ^) I" C1 R  m++;
# W  {% w; Q% S7 F2 u( @ }( ?0 b7 i4 a7 R  B
}</P>
7 }: ~, ?2 [5 I, r0 u5 D3 n+ S<>bool match(int *a,int n)//判断是否为回文数
% n  f& E$ ]- p% X  p{
! k* p( \& ^" k% P8 U int i,j,h=0;
9 n: [5 \& d( F for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
% y9 {. Q3 K' v( I+ @! P$ ~ {
1 t# C" x. a6 E' o1 b7 w% n  if(a==a[j])5 ?% s' g& G: o2 E% j' b
   continue;
, H& a: W. H  |/ }        h=1;! o/ N' A9 b9 U# \4 p6 u
  break;5 V: Y# x9 u( W$ ~$ U8 |7 w( o4 I- p* g, Q
}
6 L* Q9 C: Z+ d2 J: h4 { if(h==0)3 l' k( o, r3 L( Q/ o9 k' T
  return true;
7 C0 ~, e2 W6 m4 N* n$ X0 ?/ I else
  J; z  o) a9 J2 T* B- b- K  return false;
$ J" Z1 o, {' r+ v7 U2 Y4 J}
2 ]) K1 e9 e2 k//clock_t start,finish;
, ?- ^6 q) T4 C! ]- P/ @+ rint main()
1 W. y: w/ B! a; r$ u{//start=clock();8 K. B' y. D$ ]: F
if(in.fail())3 Z' O: e$ |" v  `9 I8 `6 I
{; y2 A5 u6 R0 r0 M0 o, U
  cout&lt;&lt;"the input.txt is not exist!";" @1 r! S0 u% d4 i/ r. ~# b: f; G
  exit(1);
4 o, |' N5 a! W6 Z }  p3 _7 w; f; Q& ]  s0 Y
String s,s1;
$ ?' H: k1 ^  _, @7 i int n,g,k,*a,*c,m,h=0;5 J! X5 z; c2 k2 [( ]
    in&gt;&gt;k&gt;&gt;g; 6 T& z0 t. P* |1 W& G3 a
    s.get();
$ b& j2 K: _5 G* v
$ K( C# Y  L9 ^  S. a    n=s.length();+ i" N7 N, f) `' F+ {
m=n+g+1;
8 |" L6 C/ j* F a=new int[m];1 g0 J: w( \& t$ y
c=new int[m];
" H: h/ w& [- ^+ [) M s.get(a);3 U1 f/ }0 v) g- @+ J% f6 n) F, d" p
if(match(a,n))
) O; @, V! y# P/ G5 L+ O5 z {' t! H  o  P4 D8 x
  out&lt;&lt;0&lt;&lt;endl;, N# y% `" A7 {0 f+ m; d
  s.display();
! k7 t! A' d, l0 a  return 1;
( \0 b; w/ Y3 K. q) h }8 N! J5 f) B4 E; a3 C8 ?- d, y
do
2 }6 O+ \5 U$ p1 ^% |8 m {
$ I9 ^% F1 I" q7 A& E6 b. [7 I     if(h%2==0)7 l* t. @* R. H. e; L/ C: i
      add(a,n,c,k);
+ [3 M5 H" t  ?/ C! K7 |$ y  else
- R' `4 I# n$ |8 N- s! H   add(c,n,a,k);
# {  Z8 C8 W% E' \  h++;
: ^9 ]/ O0 V9 I; w% s9 ?% O  if(h&gt;g)3 c5 Y7 t* y2 E- X& J' k7 T3 ?
   break;" w5 w! ?. S2 Q3 ]. h8 l$ A
}! m. Z, l2 p1 o8 X$ D: k8 M) B
while(!match(a,n)&amp;&amp;!match(c,n));
( O4 Y9 Q- B9 x0 ?. [* {7 H if(h&gt;g)
& C$ E% `0 G+ _     out&lt;&lt;"No Solution!"&lt;&lt;endl;
: D9 _1 l9 v. r6 a; x; N else
' w7 ~7 G: d9 D# T5 f* X6 r5 ]' @9 Q1 V {
/ s$ g7 N& J9 Z* ~      out&lt;&lt;h&lt;&lt;endl;
- H5 S/ O: Q  u7 p4 c     if(h%2==0)
9 Z4 E5 j% H/ E# e# w' y% S0 r      s1.change(a,n);% L- x8 S! r1 I" E
     else, i. v7 s- T6 B. P, w; x0 f% [8 \
      s1.change(c,n);
! `9 n# b" k: o4 _3 b4 C1 y% u     s1.display();/ ]& v; i: @  g5 ]+ }9 g0 M7 c7 u3 v
}
4 I$ ?- j8 w  z  B* d- r delete[] a;
2 I, c0 T* y( T4 W8 X1 S delete[] c;1 F2 r& K. H: h' |" ]4 ]. N: G
// finish=clock();
9 s" e  v( A+ c' N. S/ N// cout&lt;&lt;finish-start&lt;&lt;endl;9 ?, Q5 V; k1 ]2 @4 f
return 1;
/ q% y  {* q2 I6 D}</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
我相信今天的埋头苦读是明天的出人头地

12

主题

4

听众

1373

积分

  • TA的每日心情
    开心
    2016-9-9 20:00
  • 签到天数: 155 天

    [LV.7]常住居民III

    群组数学建模培训课堂1

    群组哈尔滨工业大学建模团

    群组数学建模培训课堂2

    群组数学专业考研加油站

    群组C 语言讨论组

    回复

    使用道具 举报

    0

    主题

    2

    听众

    6

    积分

    升级  1.05%

    该用户从未签到

    回复

    使用道具 举报

    seashell7        

    0

    主题

    3

    听众

    21

    积分

    升级  16.84%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    0

    主题

    3

    听众

    72

    积分

    升级  70.53%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    friendfb        

    0

    主题

    3

    听众

    21

    积分

    升级  16.84%

    该用户从未签到

    新人进步奖

    <p>设计算法的时候,应该充分考虑时间效率和空间效率!但是两者往往也是互相矛盾的。一个好的算法可以应该权衡这两个方面;或者更加特定的需求来设计算法。</p><p>在我的记忆中,回文是需要考虑标点符号的吧</p><p></p>
    回复

    使用道具 举报

    hero1632        

    0

    主题

    0

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    zhuph        

    0

    主题

    3

    听众

    21

    积分

    升级  16.84%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    mustpeter        

    0

    主题

    3

    听众

    23

    积分

    升级  18.95%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    darkghost        

    0

    主题

    3

    听众

    22

    积分

    升级  17.89%

    该用户从未签到

    新人进步奖

    我觉得用堆栈也可以实现吧,先将各元素压栈,然后将其中的元素复制到另外一个栈中,再出栈比较。<br/>呵呵,可能还要麻烦,没做过。。。<br/>
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-3 14:36 , Processed in 0.448027 second(s), 105 queries .

    回顶部