QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
' Z( X6 J# t6 ]. W#include&lt;fstream&gt;
6 K8 h6 A4 D6 O% A8 r) M#include"string.h"
3 |+ T  s: }; a' X' C( D//#include"time.h"
) B1 b0 O3 r, L. h* s- t  W# tusing namespace std;
8 |$ O/ F1 k4 N' G, p, E. @ifstream in("input.txt");& {; {& Z3 d3 @5 `
ofstream out("output.txt"); 6 }( O9 U' L* a8 M5 N8 k
class String
* m  B- V5 H) ]; ?8 I( m" e% X{/ n/ I' J# I8 c; M/ k
public:
* E' V+ Y9 W7 X1 ` String(char *s="");
2 L+ W% t( B7 J7 t String(const String&amp; s);5 k; C, l3 y6 K) j, r, y. s
~String() {delete[] str; delete[] pre;}0 p' H! d( ~& O/ h7 e4 a) Y; I
String&amp; operator=(const String&amp; s);# P. C/ M8 l6 {; ]% C& S
int length()const {return size-1;}
0 i6 M0 Q5 s7 _6 p: d int get();, M6 u% A0 s' s9 _" G7 m8 u
String&amp; change(int *p,int n);8 H$ c( {% R. W: Y
void get(int *p);
3 M6 z% ?- M4 O% K4 n void display(){out&lt;&lt;str&lt;&lt;endl;}  Z- ^8 o( a, i
private:
; c& d& u, m$ J- i char *str;
( c# c3 W% Z: u% j$ W# d    int  *pre;0 p9 {3 r3 I4 E4 U; I# t) y
int  size;
8 A- [' B; u6 R};</P>
, @6 _. H8 P: C<>String::String(char *s)
, ?6 S: k# @& ]! Z{
" `% T, P' I  A size=strlen(s)+1;
8 d2 K0 I6 i' \( N. O0 ~ str=new char[size];5 ]: f7 `3 f! e4 F6 O
if(str==0)  throw "error";
" d9 T' k+ u  T8 A- e strcpy(str,s);
1 j" J% v4 T7 K0 O; y% \  N pre=new int[size];0 o4 D0 d' _! G, a- g
if(pre==0)  throw "error";; q6 g( }- `! r7 _# y! ^0 \
}</P>, R! H  N, b* ]; b7 P$ b* C3 H$ l
<>String::String(const String&amp;s): W  `9 m& g/ Y- n9 H* r7 F! g
{  Z, g, l( C5 V
size=s.size;$ }' N" i9 w4 [" @1 y
str=new char[size];" {5 z# A" n! M- H$ E
if(str==0) throw "error";  \* m2 C- X/ e7 _0 ?- Y
strcpy(str,s.str);( W, ?0 o% r; |
pre=new int[size];: M5 [4 {, h+ Z# j
if(pre==0) throw "error";# g! k; _# S7 V; {* ]  b6 B
}</P>: Q9 _# E8 v: `
<>String&amp; String:perator=(const String&amp; s)* A- }$ J0 A/ w* F6 Z
{# I0 B1 j; y) \0 B8 w
if(s.size!=size)1 `9 b1 V( [% P7 h. R6 H
{2 D  p- n3 i! O; ]+ F9 m( E
  delete[] str;6 j8 i) ?/ g9 R* K2 v. ^
  str=new char[s.size];' K4 x8 ?1 o# l, T+ P
  if(str==0)* d9 f  }0 M* {
   throw "error";6 I( f& o: g# R! C8 v' u0 N
  size=s.size;& v2 O6 T4 {# N5 M, |3 T
}/ H! h) G0 X6 }. j" x/ ?" r9 `
strcpy(str,s.str);# D" h. m. ~  H& q+ c( g
return *this;
: a: z& m) ]3 Y# R* [4 F1 U}</P>
# f# R; s7 r. m  n# Z# k<>String&amp; String::change(int *p,int n)//将整型数组改成字符串2 p% ^1 j6 M4 _6 H6 O
{' ]: c- p* s) J0 ^  }, n7 l  F8 K& p
int i;
& _) [% `4 g8 k' U2 _; M, U delete[] str;
& m% O, i& N7 @& j9 f str=new char[n+1];. f/ {4 H6 Q- P3 D, P
for(i=0;i&lt;n;i++). L6 ~% I# W$ B
  if(p&gt;=0&amp;&amp;p&lt;=9)
6 y, w6 u& `; |) b3 H  R% r   str=p+48;5 m/ G  {; G! N9 ?, T+ U
  else/ x. W# k+ t! y; L8 `) j
   switch(p)8 {1 h) |' m" W& F: R+ e+ x
   {2 r- u5 ~5 C, b# ~
       case 10: str='A'; break;' y# P) W& G) X$ }) U7 z+ x" i
    case 11: str='B'; break;' D+ O3 O# u1 |/ m; L/ h0 ~9 s  }; I
    case 12: str='C'; break;3 ?% f' T& Y  a6 F- d- t2 u* m
       case 13: str='D'; break;
3 N& B% Y, q: t% ?    case 14: str='E'; break;
- A' m5 J4 d. G; [    case 15: str='F'; break;& _' B; P6 u$ i, q  ]. `9 o8 o
   }  q2 h+ g" o; r# `
  str[n]='\0';
2 @' {  n) ?" d4 f. ]1 B  return *this;/ g; q% A* e4 z7 d
}
, G- T5 b. }! g% |int String::get()//输入一个字符串
0 N1 j  y6 E1 t{3 ~7 ?# w4 `/ T( ^: U$ p( D
char tmp[40000];' F2 `, z6 z2 H; K
in&gt;&gt;tmp;
3 V& R& `  G3 i+ B3 ]" | delete[] str;. g$ V+ C8 e: b/ x8 r3 [8 ?" a
size=strlen(tmp)+1;
, @. ~$ T; j5 [6 \ str=new char[size];" h( R" Y' ?' R* N# r
if(str==0)
, R( E- ?6 r. I+ E/ V" }  throw "error";
( T1 f7 a) V$ m! o" o9 Z# v9 D# g3 h strcpy(str,tmp);7 n1 a- f' {% a7 o9 Z5 _
return size-1;
1 n: {4 g+ A- N8 e4 r; R1 J' Z* {}</P>
/ [, L( O: E6 _/ j5 L8 x<>void String::get(int *p)//将字符串改成整型数组
  K. B7 G+ C/ J$ T{$ H8 c& S, r* C8 U5 ^7 g
int i,j;
0 C3 y; G% x/ g; M5 w  |! v6 T; \9 R. } for(i=0,j=size-2;j&gt;=0;i++,j--)
- ?! Z. D( @; {. ~/ V1 K  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
- q/ }6 \3 k2 x      p=str[j]-48;/ t4 q5 U3 j5 b" [0 P( m) k
  else
  A- i9 f& n2 m) I3 L( q  {
( S* O: X# E4 ~: `3 u. b4 E   switch(str[j]), J4 r  `; y( v
   {- b, c! B0 g' S& O/ c* {
       case 'A': p=10; break;8 M* a+ |' p* L& Z, I! K+ I  n  W% Z
    case 'B': p=11; break;
$ v% J( U8 m1 e2 z0 `+ u    case 'C': p=12; break;
* A0 O6 c0 V( Z& e3 p' V0 P, o       case 'D': p=13; break;, G, E: C5 H2 u( [
    case 'E': p=14; break;! N8 d% ^: ?" k; k3 R' o
    case 'F': p=15; break;
" P! w- D$ B. v+ L' ]9 n   }7 q# u7 v( P6 C2 L# k$ b
  }: _, v1 E$ Y1 o& L; ^
}</P>$ i* F* r, ~6 a: _
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加9 v' Z& x8 X! z9 s
{, m# b3 f, C& S* W8 L- N+ C' N
int i,j,a=0;
  G# Y2 k* ~" h+ w# C    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)/ `1 _: n- k; K; X
{
. w) g5 I; {) s( ^+ R2 r: @     c=p+p[j]+a;/ _, P& _0 Q( m
  a=0;
2 R$ M  h. Z  ^+ s8 H  if(c&gt;=k)9 U$ C* S) [5 C+ {' P
  {
! w) {/ f4 f3 B1 t   a=c/k;
2 ?2 J  g" \! F1 A# d" g   c=c%k;& ?, M% S4 G, b6 R. u
  }
: o( _! r$ C8 o  p' i } 8 ^* `  i. z9 [7 ~% M$ V
if(a!=0)& ]2 M; p& V  K; b- @( ?3 A
{
, B7 R, m4 X6 J7 T# {) [  c=a;
$ I- G6 e5 I8 F4 c2 u( A- ~7 i  m++;
! t1 w  V" ?& S }
$ F; O2 l' l" o& q" Q$ w}</P>4 t2 q. {2 y& `' r
<>bool match(int *a,int n)//判断是否为回文数
$ s- U: \5 ]3 M0 b. v( m{/ }( o, p; o( c. f; e
int i,j,h=0;
) m& L' b0 Z; `2 A for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)' z. M. J+ |: t6 e  c1 K
{7 k4 O/ G- _/ i: M6 z6 T0 z/ b/ M9 `
  if(a==a[j])' a& V2 T7 n, D/ U
   continue;" c6 v6 n9 u# W  w& F/ z0 F
        h=1;
( Z0 W2 K0 x  w+ P  break;0 S/ D2 q% _) e
}$ L3 q4 W+ J; Z* Q
if(h==0)
$ o0 p, H: u/ _" s" I) L  return true;
1 n; a/ K# H+ Y0 \  U6 i% e else 2 S! o9 k4 h* l0 K/ u- T7 w$ P
  return false;3 U7 P7 r5 e% ?( @" T
}
- m8 x8 R+ m& R# ^% ^1 m//clock_t start,finish;; o$ Y' j# E- X
int main()
+ ]5 e: ~& z) j$ U" l2 b* @{//start=clock();& k' B6 X  v% F1 H% x# q
if(in.fail()). c0 f# W2 {: p0 {
{
/ a  G1 r3 J1 m1 i$ `4 t% ?+ m  cout&lt;&lt;"the input.txt is not exist!";! V) m# B" o3 d) W" e
  exit(1);
9 J$ t. x) H) j" D* {2 ?6 S0 ]1 j! ~ }1 h" \! M5 j7 |$ h" {& {& E, B1 I2 z3 u
String s,s1;) U% A  m3 a! t2 ~
int n,g,k,*a,*c,m,h=0;
  j3 E$ q+ e- L    in&gt;&gt;k&gt;&gt;g; 6 y' C' R/ Q4 ]6 w- V6 A. u5 X
    s.get();
, }$ B9 w* U! L  {
: @) g1 J7 S" C' C7 y# C! x    n=s.length();! x9 [$ R* h7 K7 b7 u) L3 R4 d
m=n+g+1;
  X/ \" |1 s; U9 n- E. t a=new int[m];( L5 g3 Z& N# \% ~
c=new int[m];! u9 B1 p& d+ r( p
s.get(a);9 J  Z  }- P% \% y% q: y/ F
if(match(a,n)). ?& m7 z1 K, d, Y
{
9 s- V( O5 ?  Z7 B# O3 l7 I: P  out&lt;&lt;0&lt;&lt;endl;
- K+ R- O( V) U1 ~& w  s.display();
5 M  m- S1 R8 i4 o  o  return 1;1 }1 Q3 p$ _! s0 [* F3 s. U
}
" M; f9 l! ~8 m do& q+ ?, R% b6 _8 F( H1 w; ?
{0 g. b4 ?! `) |4 z8 J) r' i/ q
     if(h%2==0)
1 h/ S* l% G8 a% \% M8 K      add(a,n,c,k);7 u: m1 \& ]( Z8 m" ~- S! v$ F
  else
" E# c* ^' A, W$ \8 a! B   add(c,n,a,k);* |) p( c3 ?, z" J' B# E, B5 [  @
  h++;% @2 D" p1 C3 T5 `
  if(h&gt;g)8 [. o/ m; |7 x1 h- c& C" C, _
   break;
  u4 @* a/ l4 [8 @ }4 n; A" o/ q) [  b8 b1 r. v; J- d
while(!match(a,n)&amp;&amp;!match(c,n));3 ^# c9 N% C5 |4 z( _
if(h&gt;g)
) e$ [, l  J* G8 k     out&lt;&lt;"No Solution!"&lt;&lt;endl;8 `! C3 P; U5 q. p/ _: r0 x+ `
else* P# G& ~" ?% V& B
{
: u2 X+ c% I$ D6 q5 f      out&lt;&lt;h&lt;&lt;endl;
% t3 W# X; d1 U: a% r% N     if(h%2==0)
) M* I& ~% m, o" R1 N2 g% w      s1.change(a,n);  Z* g0 E6 V8 a0 S; C! |
     else
) W" Z2 U# m& {$ o% y) @4 j0 r      s1.change(c,n);
$ z/ F( E$ Q6 n2 o     s1.display();) }8 g$ s+ b! H" A8 B7 Y
}5 |2 \1 Z2 x2 Q( o
delete[] a;7 G( U+ {3 |; q" g% d% X
delete[] c;
% A; [2 J  x( `& x, k# f$ w// finish=clock();, R. ~$ ?3 j2 q; ?5 N  y
// cout&lt;&lt;finish-start&lt;&lt;endl;
; A7 [4 Q4 j5 {6 [ return 1;/ K. m- Q9 O/ B4 j! z
}</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-9-3 19:16 , Processed in 0.592365 second(s), 105 queries .

    回顶部