QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;) H* e) ?3 G4 N& |' P, ?" f5 W
#include&lt;fstream&gt;; Q* N+ R, Y! ?0 t. z7 Q) G6 ~
#include"string.h"
7 ]; g  z9 z" K//#include"time.h"' [; d8 O% E. o6 I) b! W
using namespace std;
! p" A# `+ {+ V. _& n  h& B: k, ~ifstream in("input.txt");4 k9 U; A0 ?) r" [" t
ofstream out("output.txt");
& Z# u! w$ K' H. u& W1 A5 u" F: }  t8 rclass String 8 ^+ [2 Z5 |$ g' I+ E0 y0 g! t
{
! X6 u9 D# J9 ]5 V; I: z# p- G  e/ zpublic:
2 B6 e3 _, e& n/ s& h! n( u3 [ String(char *s="");
) `; B. }6 M! d# S4 o String(const String&amp; s);. l( x0 ~( E" N1 Z( g; B
~String() {delete[] str; delete[] pre;}
: U# t  C% Z! W/ a) F8 c String&amp; operator=(const String&amp; s);
4 z# T6 R  c6 f+ c# o+ V int length()const {return size-1;}
3 ~# g9 R. R0 q/ g int get();0 z" Z% M( t- A7 C. H) ?( [% L
String&amp; change(int *p,int n);$ V: i5 _+ C& {9 E
void get(int *p);& X! \0 Z& |# w  p
void display(){out&lt;&lt;str&lt;&lt;endl;}/ H) ?" Y) w. Q  A9 m
private:
! O) ~1 O& Z2 s% g char *str;
7 o$ }1 v1 ?1 c7 k    int  *pre;& r0 r  U( |( z# u8 k: `
int  size;7 z& h: [, t* n) |/ G, {
};</P>
& o0 y0 Z3 e. h; E/ p; _4 J! L<>String::String(char *s)8 B, ^  ~8 l9 X  `+ \3 l. I
{
" R- ]# t6 P( ?% x7 m  p3 G size=strlen(s)+1;# m- m# o% T& o# ~/ F' Q; n' B
str=new char[size];: f7 x2 w9 G) I* S1 B
if(str==0)  throw "error";: R9 B  k# _& _/ v6 v
strcpy(str,s);
" e# L7 X6 o, f; q pre=new int[size];5 b" X5 P2 c1 a
if(pre==0)  throw "error";
* E. Q7 J5 H% R2 A2 o" K}</P>
( n1 r4 X9 t  H( t! r- \) @! D. @! R<>String::String(const String&amp;s)2 @& q. g: \1 ?9 C
{
7 g- q# f0 b" [ size=s.size;1 H" o8 o% N3 z" T% M
str=new char[size];
  h4 w/ E& {7 A. A if(str==0) throw "error";$ U) q. j0 \# q/ c2 B
strcpy(str,s.str);
5 l& v* `2 V' @4 d, `1 ^' R pre=new int[size];
4 t+ l( F0 B* }. {3 d if(pre==0) throw "error";
. z3 K3 a% U( [! j' ^; j5 v6 I6 t; n}</P>6 n( z% M3 t* Y( t
<>String&amp; String:perator=(const String&amp; s)
' v% y; a7 C' r. j% m; x{& q- }$ a' ]( g. J+ ~
if(s.size!=size)
7 ^* d+ ]+ I0 M+ @. P4 ?4 [0 v {9 l3 i& ]$ W+ }0 O5 F2 m+ m
  delete[] str;
2 ~7 Z' ]; i( i6 ]0 ^8 t  str=new char[s.size];
% O& q3 W8 O( C9 r. W5 P  if(str==0)
# A( h7 G% E2 t9 V. g2 ?   throw "error";; R% ]; E1 a" R( Z
  size=s.size;
+ F/ N# O1 @) C! d& | }
5 D, G9 Q1 E* b" f4 |7 {1 } strcpy(str,s.str);
2 n% [+ }) r" E return *this;2 N$ L* l8 E: @- ^  f
}</P>
+ U5 b' A5 M: w% l# V; i<>String&amp; String::change(int *p,int n)//将整型数组改成字符串5 ]- E' G( ]0 D
{
8 D0 ~0 D$ L2 G8 y( h9 C* g int i;1 j/ {) e/ r% E
delete[] str;
, k6 i- G3 t7 d; N- a str=new char[n+1];9 G4 c( \8 d- ?0 j0 z! k" [
for(i=0;i&lt;n;i++)
# A. H8 F2 `7 @0 w  if(p&gt;=0&amp;&amp;p&lt;=9); m) B# g! T8 L* b( ?
   str=p+48;& X  t' P+ {; e( R
  else% |) J, v! K/ j+ U( P6 v  l" @
   switch(p)! D1 R0 h5 j, d2 w7 T
   {. Y, a) _3 H3 R9 l
       case 10: str='A'; break;
1 u' R6 ~+ J2 d4 x% K    case 11: str='B'; break;3 C' {) ?; k5 z
    case 12: str='C'; break;
, {# d7 E4 T2 J" C       case 13: str='D'; break;. i$ _% z/ `7 Q' O' [. S2 O3 {4 A
    case 14: str='E'; break;" D1 d7 Y' v0 [2 o: q9 z
    case 15: str='F'; break;
) j( ]& o( _4 g* q   }
: m* G1 {  Z6 O" t* S/ b  str[n]='\0';
2 X9 ?! s! v* M8 p  T4 g8 j# e  return *this;
6 i* O9 e( G7 B- ?2 E}
6 d0 M6 R% \8 tint String::get()//输入一个字符串7 R( X* b2 R, w: [7 p1 ~5 R
{+ |% Q" g4 E; s( D4 ~# v: B% J
char tmp[40000];
' k0 B2 w4 o7 ?' c in&gt;&gt;tmp;) p6 l. s  Q, _% f7 @, S, U$ Y8 q
delete[] str;: P* H3 |: y5 W( z# x
size=strlen(tmp)+1;
' E- m! M6 `, B2 R5 L& }1 \ str=new char[size];, F' a, j/ v( v( \% z% m+ z  e
if(str==0)
9 G* P5 u) S- W' m1 r  throw "error";0 i* o, n8 z" T7 n0 o
strcpy(str,tmp);  [/ a# M! n6 Y9 v
return size-1;$ m8 Q# ]& c8 I; [' |% |: B
}</P>
$ h; z( f8 F$ a7 E/ \<>void String::get(int *p)//将字符串改成整型数组  e) u+ Z4 a1 @% ]6 f, J
{
0 z6 ^6 r! r5 s! s int i,j;# t9 P: s- ]! i. `3 j. }5 U* P* E+ X# x
for(i=0,j=size-2;j&gt;=0;i++,j--)
  }* F# Y8 ~3 z' _4 v) X" t$ [3 S  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9'): Q! t" e8 V+ o
      p=str[j]-48;% T, p9 U  K3 W' y7 D
  else
  `0 y# B0 P( O  {
* t4 C8 I7 q. f   switch(str[j])& ], {* Q" w/ j8 [; [& j
   {! E# S6 \; m  F/ [
       case 'A': p=10; break;' G5 F- A/ P" K, Q2 ?8 d, f
    case 'B': p=11; break;* B$ k* j0 m: k/ |- `
    case 'C': p=12; break;, ?# i  j$ B8 H
       case 'D': p=13; break;
" ]: p( R7 `- \4 S: H' K    case 'E': p=14; break;$ [' g& t8 V9 A5 `
    case 'F': p=15; break;& _; u3 c/ D4 }3 P, |2 K
   }
% t/ c  o, _% m& y. z# ^4 a  }
- i8 i* I+ I# g% D5 K# {4 ~}</P>& X( d3 p6 e9 W/ V
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
& M1 r, ]# U# j: `{
. K( k5 g3 G: v. W4 y0 V9 b9 l int i,j,a=0;" A1 q+ {3 P8 z( H
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
, C" x1 M- l% T. l  j {
& S$ ]: P+ \' _" K- H4 U4 F1 n7 X     c=p+p[j]+a;
$ T% }! v$ g" Y% ^2 c( \  a=0;8 M2 X5 p& Y) a/ f3 F. `( H* h. q
  if(c&gt;=k)
! G4 a" Z. u! `( f% ^  {
0 \% O0 G" I) }. T; g4 [+ ~   a=c/k;
/ x! T. D) J2 k% N% R% l   c=c%k;$ ^- l- d* Y2 C7 c& m2 B' _
  }& C# W) S" v- F$ `6 o. Z+ V
}
4 o6 ^. ^0 Z; \$ O" _ if(a!=0)* k. O% W5 k! o
{
) G" l9 P2 ^  m  c=a;' e" N! l) T5 i0 H' S- T  M
  m++;
5 [/ o6 S' H: g; L8 T }0 r& E1 m5 M) `
}</P>
' b6 F( H* s% H/ [; a- u- I<>bool match(int *a,int n)//判断是否为回文数1 r1 d7 n3 U* f) s
{
/ G% S* A) J3 y( }$ f2 n int i,j,h=0;! q( R/ K5 Y$ P& D4 U1 [
for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)1 @; l6 c( f, ^7 E0 A4 E
{7 J+ O4 \8 |# d) K
  if(a==a[j])
' f6 P8 D- |9 _; `: b   continue;  r% l) F9 O5 w1 o
        h=1;
0 Q, U  z5 w* r3 z7 j* b  break;
1 E& a% m) U/ P& C& z: B# G+ L }2 s5 w/ R  x( ^* @5 |
if(h==0)8 j; O% T/ d. D2 r, }
  return true;; u! q. l) d2 z0 D8 \9 [
else $ P4 |8 F0 w" x8 e3 m* N
  return false;
# w# n- ?8 V2 i! ]' o7 Y}
! ?1 z# `* n2 s# X) V0 c! ?//clock_t start,finish;
# E+ B1 P( t- e; bint main()
/ f, W: {6 p1 j{//start=clock();  [+ c/ \* Q9 S2 _
if(in.fail())0 ?1 `3 e: ^( O5 c2 R0 b
{- r& H& n3 a& q( }% Q
  cout&lt;&lt;"the input.txt is not exist!";
# J  L; `2 z1 @/ R# N  exit(1);! H: \$ [! L+ t. K. S+ `
}6 M2 R, H% R) A+ b8 W8 y0 b
String s,s1;
7 h; R2 X# ?3 f, V* Z int n,g,k,*a,*c,m,h=0;# _7 q9 b+ a1 @" z/ {/ m4 Z4 P/ y
    in&gt;&gt;k&gt;&gt;g;
) L+ i1 u3 `8 ]    s.get();% t# P" x2 a1 O  d2 i  T1 J
$ Y% D3 m" ?0 ~4 b) v
    n=s.length();9 x4 i/ d3 V6 J% i3 z7 w- h
m=n+g+1;
9 x$ b0 I0 Q* F; S- y a=new int[m];$ K$ _0 r9 m" d  A2 M4 p# q& `
c=new int[m];
, V6 M* t' W/ b" r% V$ V' f s.get(a);4 C0 t1 C1 Q6 w/ T, Q
if(match(a,n))
0 M4 v. n4 @/ e2 t! p! O {" f, r" Z# E, {$ |7 `  @. o
  out&lt;&lt;0&lt;&lt;endl;; k3 H! a" L1 D; W7 ]
  s.display();& \. R1 J- l8 [2 s- S
  return 1;6 {, T* `: Y  \( X- I) G6 }
}, a1 c5 B/ c1 t' B5 C4 [
do
% D2 M$ [+ L9 A7 @1 N; w- i* @ {
4 Y, a0 L# i. `! [+ v; h     if(h%2==0)
$ n$ ?: e  u0 s/ B5 S8 N+ `2 E4 v      add(a,n,c,k);
4 e  P$ U+ g, V9 N6 o, L/ _9 x  A  else
) o) K# r7 \; v' m   add(c,n,a,k);9 c! V+ K- V# \3 P7 ?
  h++;5 a3 ~1 I" x; ?* Z, B0 g; H! Q6 k" D
  if(h&gt;g)0 E; G( c7 E" p. V" P
   break;& r* l% x) P2 I4 Z) O7 A
}
9 `6 j6 z  X7 X8 A& D0 u3 d while(!match(a,n)&amp;&amp;!match(c,n));3 u3 T8 E- y7 o" L9 c' ^
if(h&gt;g)% B- d+ T& ?5 N; |! x9 |# g2 B
     out&lt;&lt;"No Solution!"&lt;&lt;endl;
; u" y, Z  Y' o else0 @1 C- h1 y, S- E" J9 k/ ], D
{
$ }' e6 M/ W5 r" B      out&lt;&lt;h&lt;&lt;endl;
- v) O/ T7 X  D( n6 c( r     if(h%2==0)
/ t- N9 N) i1 }7 |& v3 B      s1.change(a,n);& P8 t' g/ @0 l* T" Z5 H
     else
8 e/ }3 w, i8 m8 P& {+ T      s1.change(c,n);' l6 {! j9 A; q' [: f
     s1.display();9 q: |& C/ M5 F' l: x; ~/ v
}
. Y, R9 ?2 v$ `/ T  N/ W delete[] a;
" b. a& Y. V' U. E; |" t delete[] c;: E( y& V( a: p" ~
// finish=clock();$ a! q1 ]0 X* h" M  I( ?
// cout&lt;&lt;finish-start&lt;&lt;endl;# y. M) p. F* k
return 1;: X( V0 U# d3 t+ b! B0 Y
}</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-19 23:37 , Processed in 0.570726 second(s), 110 queries .

回顶部