QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
! _% }( l8 ~3 z5 O  o#include&lt;fstream&gt;
/ E/ W0 I8 C  Y# m" n& B- ~$ J#include"string.h") R4 i$ C' P& f) ]) n5 n
//#include"time.h"& ?) Y1 f% o/ q
using namespace std;( \0 Q  U6 D: w+ D
ifstream in("input.txt");$ }! R- x, A4 Z# b! J
ofstream out("output.txt");
9 ~: u5 d! a, T$ f( X$ z* k) a, Q, Tclass String * j) j; S% _1 h) r% _$ B
{
, ^! h# J: y. V8 ?public:" ?% U+ l. y7 o0 X7 Z9 J! T6 }% s. z1 ^
String(char *s="");
/ Y1 b! l) C) a String(const String&amp; s);
5 G- k7 j+ e, A( p* u' ^ ~String() {delete[] str; delete[] pre;}5 {. k  ~- `) M. C9 r7 f! {
String&amp; operator=(const String&amp; s);
+ U1 x1 ~/ W3 r2 K& R7 c: Z8 m int length()const {return size-1;}
: J: `5 i" S' L+ X- m int get();: w7 p, B" v0 B/ y& f% r$ [
String&amp; change(int *p,int n);
7 z- c. A1 M7 H, c5 n( D7 x void get(int *p);; }( X% a6 S- I1 {& W/ O
void display(){out&lt;&lt;str&lt;&lt;endl;}
" n" @9 G( r' y2 ^3 _7 wprivate:
; z8 C+ s" e* @7 ? char *str;
4 a0 c- M4 v, o" C1 c    int  *pre;
& b/ V/ M3 j, t( @) Z int  size;0 y7 `( W  A# Z9 N7 l
};</P>+ q* d. L  ?: ^% R4 P
<>String::String(char *s)
5 ]( V; \- [# C2 k! y8 t, d- s8 W{9 E$ \0 ~8 m8 G7 {
size=strlen(s)+1;$ t1 y# Y6 W4 u: ^3 T0 ^
str=new char[size];
. `8 c. G# ?  p/ v. j! Y if(str==0)  throw "error";
! K# {- T% l+ [: r" k- K& [ strcpy(str,s);
5 B8 r: W& p/ I2 H7 v pre=new int[size];
6 f. {5 g5 ]# i! ` if(pre==0)  throw "error";2 e: C* a4 q/ Y9 X4 y6 z
}</P>
$ W, K# _2 `" }<>String::String(const String&amp;s)* y4 T1 _) f3 G+ [7 g
{3 z5 g) w6 t( h7 O0 W
size=s.size;
( o+ Q3 L* v; C; U0 n, V str=new char[size];
# X& S. y6 X2 s0 w0 {4 {: R if(str==0) throw "error";
6 Q- p7 r/ F7 c; f0 ^8 q8 c strcpy(str,s.str);3 h* B) \$ ]- u/ t# s
pre=new int[size];/ Y- @9 H* `5 H" |9 Q% W
if(pre==0) throw "error";
6 g; p9 k1 G0 X}</P>4 L7 t( B0 r. _8 {3 l
<>String&amp; String:perator=(const String&amp; s)
( S5 x2 t% W2 d/ d$ O' y{
1 B1 |9 e' o# G: `7 N9 d3 a if(s.size!=size)0 \9 Z) i( {/ k* _, G: [
{
0 Y5 a) d' X/ s7 p  j0 v4 e  delete[] str;
9 t1 }+ L' s. \! T, n4 H  str=new char[s.size];
; m, ]3 {9 ~# v. Y  if(str==0)
  k( N, h3 G, m! |  d9 D   throw "error";9 x) w6 q1 r: y* _* m& o
  size=s.size;/ v8 o/ K& R: k+ c) o
}, }# h3 P) L4 ]0 Q9 P- r: I
strcpy(str,s.str);5 [' s' L% X; N3 \+ x
return *this;
- \0 O2 j0 Q6 E! J( [" y% ]}</P>$ d4 C- l: e' u4 P$ c/ a4 Q6 M( q' i6 W
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串5 h6 d4 j6 R5 Y
{* @8 c" v" X- [2 _. j/ I
int i;( L4 w* `! e2 U$ ]6 ?5 q4 Q
delete[] str;
2 l3 Y; ?$ v7 a# H0 f str=new char[n+1];, H( K, A  ~" @: A
for(i=0;i&lt;n;i++)
/ v* e3 H, t% D+ V% u  if(p&gt;=0&amp;&amp;p&lt;=9)
% w: J7 B1 [4 b- ]. {% s   str=p+48;
3 V- N4 G4 L% U; P& ~; X4 o  else
& T. {$ x7 H1 q: F% L3 G   switch(p)& Z% s+ o9 ^7 d% c$ d# w
   {
  y  ~4 e- C7 L+ l% g5 A0 ?       case 10: str='A'; break;
- f9 _0 k& p$ ~5 b$ @; @! S    case 11: str='B'; break;
% M: \1 u9 [! ]( D7 U    case 12: str='C'; break;) J# t: X. m0 J0 ?2 Q) z
       case 13: str='D'; break;
) M: h) i1 a' q+ T5 c* t- v    case 14: str='E'; break;. H& g2 T  v% U; W. o: `3 w% n1 S% u
    case 15: str='F'; break;! `! j& G( y, ]! z$ V
   }: `( H& O# _1 C) _2 V
  str[n]='\0';+ u* G/ U, l6 [$ w7 x* S% i/ D
  return *this;4 g1 ], J) D' R8 n1 c
}
$ O4 d7 [' l' S9 e( {+ x: Qint String::get()//输入一个字符串; L" X( c+ t# k( [$ I1 [0 B- `- n3 f
{
% i( \4 D5 H2 \8 ` char tmp[40000];
0 T& X# j. v' a1 y7 x in&gt;&gt;tmp;
  D- f: h/ d( w8 M delete[] str;( P3 `  M7 l, R; p( z% f- E( D
size=strlen(tmp)+1;
8 |+ h' l( [; A  _! n str=new char[size];
! l% P) T7 y& X& ]' z1 i0 K, j if(str==0)& `9 l! @& {, K& g, G$ L
  throw "error";3 j6 x  I2 L# |% S! o
strcpy(str,tmp);* M. I4 @" t  p$ m+ t+ E8 [# N
return size-1;
' o) m5 d# `! }, {! S. F" e* J/ |}</P>1 k) o5 ]2 I0 l1 X  ]( s
<>void String::get(int *p)//将字符串改成整型数组
" S8 W5 U' O3 e{
& V/ E. C6 r- O" X2 L; | int i,j;
2 E; f) A) H7 c. m2 e for(i=0,j=size-2;j&gt;=0;i++,j--)
* a1 j  A( M8 T4 E6 b- S  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')1 j* y9 A6 M" h+ ?4 W5 L& ~
      p=str[j]-48;
$ k' Y% y  S) |) q/ }/ ~: e3 J2 T  else' `- W! Q. m  \/ C9 h
  {
* G4 c8 G: s) B0 G8 N# d   switch(str[j])/ T3 Z9 O! _/ G. B, a2 }
   {) f$ S* L) N  q+ V+ x
       case 'A': p=10; break;
2 T( c: U  E; |' o4 f3 k; l    case 'B': p=11; break;; C) a8 W7 k$ a) I+ ?6 w
    case 'C': p=12; break;) Z+ b. Y& `* p; u- K
       case 'D': p=13; break;
6 b& o& \& F3 C    case 'E': p=14; break;
3 {( k8 e' w- a" q3 k( l& g! n    case 'F': p=15; break;
  i% B& D7 ?2 P: G  z# U   }
1 i/ c6 p: C( X* g5 r. J  }
* r. e( c8 h  X  l2 Z$ ^}</P>$ J8 ^( ]$ Q9 ?8 h# V
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加6 J6 h3 U* t3 g* D, I( s. e
{. f, S4 h( q4 |
int i,j,a=0;
$ k4 j/ l3 ]: ]- A- J9 y; C    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)3 k) b( ~0 K' y7 c% i! E
{
2 t2 ?" r! d( M# M, f! H' C7 ]2 j     c=p+p[j]+a;& C! u7 q% w  b/ v1 ^3 r+ w
  a=0;
2 x. d7 y! G  A  if(c&gt;=k)
8 n% [; A& F3 K, e5 C0 T9 o8 e, M  {- E  V% }) P3 B( T& c- O- d
   a=c/k;
2 D- o/ q# V# \/ b   c=c%k;
- Y, T  n0 C0 v5 b0 K. [. C  }
  {# P8 |  [" I) |; [ } : e4 j! j9 X; o5 }
if(a!=0)
7 e, L5 }0 p5 {: j2 m {$ o1 S1 m; x, y. A8 F
  c=a;1 r) x, Q, A; ?6 l
  m++;
7 F1 \8 e+ y. \/ f! P( V, h$ h }4 A& c: |4 b7 W
}</P>1 U% }9 R' K% L
<>bool match(int *a,int n)//判断是否为回文数; M8 c+ e6 W/ R4 }/ z
{
0 t5 K5 R% |) r8 C: ?/ \; e int i,j,h=0;! K" n6 a3 T, `* P: M" O4 i
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
" F- ]* `2 T: l {
0 p! U; W! H( [' n( U; @! L  if(a==a[j])
* s# i6 F! g$ t& h$ |2 C7 o   continue;; Y: P+ z9 _, d5 E/ N
        h=1;
2 g8 k0 W+ ^: u  break;
/ S. d- V' C# G% I4 @5 \* m7 S, I }
' E! j, Z3 s# b5 b if(h==0)
/ o) [9 C( d: ~% _/ J5 t- v  return true;$ Q: V2 `) Q  X1 ?
else
0 Z5 Z. W, D( E4 [7 J9 b  i0 ~  return false;4 G* Y/ s! e1 N# k0 F
}
+ G2 y# e1 |4 q6 N1 I//clock_t start,finish;* p. ~6 }5 A5 K1 c. ?
int main()8 t6 L) |- |- Z8 x% T" k# ?: D
{//start=clock();
, w9 w+ Z' a! l* i8 G- p if(in.fail())
  z; I, R( I8 L& h6 @' ` {% f- f8 J( x2 ?
  cout&lt;&lt;"the input.txt is not exist!";+ E" ^: u/ [" `
  exit(1);
( x) T$ b7 q/ I }! K/ I# w# F% [# ?: _8 C
String s,s1;/ n" ~7 E) n! B6 ^
int n,g,k,*a,*c,m,h=0;
, e; m6 r, I- A" ^    in&gt;&gt;k&gt;&gt;g; 7 {- {& C( \( R5 _$ u* b' v7 c
    s.get();
" P9 @- m& B9 D9 M
) r  f+ ?. S6 T% d) a* a. U, E; [    n=s.length();5 I2 \  f& v7 U' R
m=n+g+1;. R; W( J7 Z/ G5 W
a=new int[m];
2 e( {+ \8 U$ X; `; L c=new int[m];. v9 S2 @! e0 t5 |) k
s.get(a);& ^3 [6 j5 a8 z7 W. R
if(match(a,n))
/ F& q+ Z6 Q$ [; c7 l {6 J1 p; e  j7 ~- K, t
  out&lt;&lt;0&lt;&lt;endl;* e. D  W/ h9 M" Y) ^- T  J* m
  s.display();% M0 Q( l5 b- I+ L
  return 1;
' j: D+ N0 n! h0 @/ e3 T }4 B: r* e0 S) X" `
do
- [& z4 T. g, ]- e/ U {* ~4 h' e( ^3 j7 R6 \
     if(h%2==0)- A9 Y/ i* G: j* h' I
      add(a,n,c,k);( P. f) k: A4 `2 D$ W8 I
  else
7 ]  S7 i* ]! n5 ]7 R- d   add(c,n,a,k);
( F/ |8 k4 Y( X5 V' }+ r; c  h++;
' ^$ N$ J+ l2 A7 [3 N& _4 ]  if(h&gt;g); M4 t1 k6 K1 d4 T" ~7 Z
   break;( v: |5 Y2 W/ `
}
2 G+ T2 r" Z6 V while(!match(a,n)&amp;&amp;!match(c,n));
2 e* W# R3 x, F( ~: R if(h&gt;g)0 x0 a/ L8 b& b: N
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
( S& p2 q8 f" _9 `; C3 } else
2 u. G( @5 R& T6 N7 @ {
' ~( @- N& N  A. E% H# X. g      out&lt;&lt;h&lt;&lt;endl;- S: ~" L: _. W. p# I! R
     if(h%2==0)) x7 b: t, |8 u$ q* L7 _
      s1.change(a,n);
& W( F2 O; r1 i# u     else" @. l) M; N/ d! h$ b5 V
      s1.change(c,n);9 F- o& g" U# J
     s1.display();1 |7 O5 C7 D: E0 M* n+ p* C( c
}& ~2 }7 w! }6 A! R( g
delete[] a;) F9 n% ?. }* z' a6 X  o
delete[] c;: u  B$ T( K# Y" [
// finish=clock();
( m/ D9 B7 v! {( T, e5 o, Q// cout&lt;&lt;finish-start&lt;&lt;endl;
# A8 U: ^+ s3 R. |; y1 B. W( W$ c9 T return 1;
/ W( K# c- I5 {6 F' ?. c& L9 Q}</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 19:31 , Processed in 0.712987 second(s), 109 queries .

回顶部