QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;
) b& i- e+ g; K- }" p#include&lt;fstream&gt;
, b$ Q* B' g  @/ y$ ^4 H: G#include"string.h"
) Y, [: f+ d. D) V* h! O+ t//#include"time.h"4 i( x6 R: A4 N  L9 t$ K
using namespace std;& O$ i) H9 |( I5 V5 w3 O, b. n% c
ifstream in("input.txt");
5 z4 Z+ X6 E" f( Bofstream out("output.txt");
) c: ^* A; W4 ~6 s, wclass String
- M' h; U5 Y* C! U{  y& [% \: X: T& s+ h8 t2 X9 A
public:- C7 c9 o  F! D. p
String(char *s="");
/ M5 d6 j7 Z1 X3 R9 P String(const String&amp; s);
1 ]; d1 H2 w" J4 Z! z; L ~String() {delete[] str; delete[] pre;}& ^' E7 Z- k. j
String&amp; operator=(const String&amp; s);8 D+ J5 h; v' \: a: D" g( G
int length()const {return size-1;}5 P4 Y% \1 U( B
int get();2 b5 r9 D6 w* |2 L5 S6 t
String&amp; change(int *p,int n);
2 w! U& D9 N* w* l2 W4 v$ d( u void get(int *p);
9 G9 _3 M& Z7 L void display(){out&lt;&lt;str&lt;&lt;endl;}
  [( ~; z  {% s7 A3 bprivate:
- }& @" Z8 I, F- H2 I char *str;
; R! U7 |" }& L    int  *pre;
; O4 {' C' Z9 I1 X4 r# K int  size;
0 i$ i6 q+ A* h6 R};</P>- @' D$ _& _6 r. t  Q* o: K
<>String::String(char *s)% K2 F, f; T5 P0 }6 K6 j* G0 `
{
( o) Q& E$ T% }" S9 B: r size=strlen(s)+1;
9 {$ r# P& p) q$ Z0 o; e/ U str=new char[size];7 N: ]; v8 g1 A  t8 J! }
if(str==0)  throw "error";
2 B; a& s, H6 J* w4 P: o strcpy(str,s);
9 I, r; I; I' v! }5 Y9 B! D, Y pre=new int[size];
& d. |6 E8 ^' w3 G if(pre==0)  throw "error";
+ ?: s+ X( u1 M- m% ?1 Q9 i}</P>5 k. {: b3 s) h4 G2 }4 B
<>String::String(const String&amp;s)
; S! k% C& t3 q7 W4 }1 h' z{
4 C" |0 h, D. P# X7 u7 E size=s.size;
3 ^1 f* j% @$ c# C$ ? str=new char[size];
! S6 o, _; N/ C3 k( Z if(str==0) throw "error";" ]+ x4 R- B$ L9 |% G  |; V9 R
strcpy(str,s.str);$ y8 g4 P1 s- {. B/ D( ]# B
pre=new int[size];0 \4 o" i5 b7 y+ j; f4 k4 g# p
if(pre==0) throw "error";
) z5 A8 C/ y8 Y6 X}</P>: z* z# v6 U# `. [
<>String&amp; String:perator=(const String&amp; s)7 ?4 X1 Q0 U( D) J% u6 q' h5 ?7 M  r; [
{
( ]2 f4 E; C; H" L4 V if(s.size!=size)
7 d" V: b9 H' i; m& L" x {- q/ U" c# }( r0 F; F4 c+ v
  delete[] str;: U& U) D' C1 O5 [, `9 ~- H4 M
  str=new char[s.size];
6 O. B- L2 _3 N; n2 j7 e  b  if(str==0)/ F8 f9 _( D8 o" A
   throw "error";
8 h  b% y  [9 W0 G$ r+ w  size=s.size;
0 V; G" [; k" ^- Z' Y }3 e9 z2 Z8 [; v. \' M
strcpy(str,s.str);
$ u7 V! d8 G7 x+ b5 [0 e return *this;
" d+ v5 z/ S) P4 G; i4 J# J3 e}</P>1 [  |, [7 |% X9 n
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串
/ _  D0 t, D$ V/ A- R{
% P0 [* E4 q1 h+ j5 J. U int i;
- ^/ A% V/ q, h delete[] str;
* E. g; T! s/ K5 V8 `* Q) S/ S str=new char[n+1];
/ ^8 L) ?/ Z; V2 ~4 D7 A- } for(i=0;i&lt;n;i++)) C, F' N5 t) L" Q1 W
  if(p&gt;=0&amp;&amp;p&lt;=9)
- u) }8 Q6 I! h+ i9 J# W   str=p+48;4 Q% S) \& L: p% L% C6 v
  else
3 {) A) f1 I$ w( k& P7 E6 g   switch(p)- e* W" i3 U! c6 v
   {
' P6 q8 Q" o  h( ]- E  ~       case 10: str='A'; break;
/ [. k' H$ h7 A, D" \; j3 n9 D    case 11: str='B'; break;
6 P+ u0 g4 c7 ^* |: w3 n    case 12: str='C'; break;
' V$ L0 l/ _. e1 ?  ^       case 13: str='D'; break;7 V" M+ Q% [* f- ?( {# X
    case 14: str='E'; break;8 T( s6 b- Q/ p( d
    case 15: str='F'; break;
9 x4 N" c3 }6 Y6 p   }
4 X6 Y# f" d  m& x6 w' A  str[n]='\0';
2 O* ~4 e! g; [5 w1 q  return *this;
! D" u: q5 n) y}
2 r; ~0 c# U: ?6 [( v: Z, _& pint String::get()//输入一个字符串
7 Q# b  K3 n$ W9 ~{
$ Z. Z$ n; y  [2 G char tmp[40000];. a; x; A9 l2 a- }! b) Q' T9 O
in&gt;&gt;tmp;( r1 [2 A9 c. k8 C5 X
delete[] str;
8 ^7 Q" E) {  w7 t$ G size=strlen(tmp)+1;# V; P5 d! g" f6 p& u3 y9 Z4 g
str=new char[size];2 ]- j8 i" Q, f2 s& W) w7 K0 `% P3 y
if(str==0)3 V& _3 q/ h' p9 b& j3 U
  throw "error";
8 o/ `3 J0 ~2 h) M3 P- L strcpy(str,tmp);$ l, D3 [+ V. l/ w5 E$ z
return size-1;
3 {1 B0 z$ s6 S) q% }  m}</P>
! u2 C/ \0 L" q9 `<>void String::get(int *p)//将字符串改成整型数组
7 d9 T0 R5 Z2 d1 T# I{& Z+ @" [8 ~! j5 k7 D: [
int i,j;
/ V" ~7 v8 o- G  i# M for(i=0,j=size-2;j&gt;=0;i++,j--)
% O3 ?. Y- O( f, C- f+ s: J) e  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')
! |. m: `# A; N5 g( I7 b4 \8 J1 V5 J- E      p=str[j]-48;
" O. O- x% H8 f+ E0 Q4 N5 U  else
& X5 f2 D- I! x$ i  {
* w& e. k" p7 u0 R( h% R* d% N   switch(str[j])5 F8 M( z$ s- x$ u% z
   {' s1 q: u. o& `" l3 U2 U7 z
       case 'A': p=10; break;
% [# O8 O1 q, {9 Y' F    case 'B': p=11; break;! Q/ \1 ]1 `/ v% z" b# @
    case 'C': p=12; break;% Q' o  P$ D. I
       case 'D': p=13; break;3 Q3 Z; N, W) ]* ~! ~4 a4 E
    case 'E': p=14; break;: Z  `9 @4 w  B% p3 U
    case 'F': p=15; break;
; f* w0 R  s$ g- r   }8 U7 V1 G6 \2 L5 X; y0 R4 x
  }6 S0 P; g& }5 ^1 Q( ?1 [
}</P>* L1 O! l1 U/ d# A
<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加
- V' n3 i5 f' K{
- l/ K8 q# o" T) B4 O- y int i,j,a=0;
8 P0 M; V4 d# {* x( R    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
/ p, n& f0 x7 E# F {
& h8 \/ E& L8 e2 T# o0 x     c=p+p[j]+a;1 T6 h( \- i$ [$ F0 S3 r6 T2 U
  a=0;
: C( R8 ^1 T! s, i  if(c&gt;=k)
9 f& n1 L2 G+ k- \  {- f" Y# y, Q6 t! x% j0 ~6 R/ T
   a=c/k;
: i! U5 i; l' J: ?8 N' F6 K; P# ^2 ?" |2 P* F   c=c%k;6 q& w" D5 |* H# ]1 d  t" t
  }
; f. _9 A* Q2 ? }
9 E$ {3 j- c! [3 S, i7 w( P if(a!=0)
* z! S1 l9 e  C8 k( H% W7 l; O {- Z3 E, ~7 _. o* G7 Z2 _
  c=a;' Q8 U) B2 m9 g+ g
  m++;/ P: S" b0 o& |* l3 ]; r; b* I( m- S
}8 Z- Z4 {. d  Z* u
}</P>) {( U( f' f+ K0 g& E" P7 L
<>bool match(int *a,int n)//判断是否为回文数$ X  b  r8 O) m# c! ~- w4 l
{8 X" d* k# j; Y$ k2 l
int i,j,h=0;
& O. b1 ?7 `/ _+ t for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)# _7 ?: T! m- L
{8 ^5 a& i( ?' U: O5 y* D! t
  if(a==a[j])
; r; b* M7 a: i% s  t   continue;% E: f  Z4 C9 L
        h=1;
) H! j6 h$ {" Y6 t2 S9 I" Z  break;! x( O) t3 H/ Z7 B5 @9 N
}
& k5 J9 {4 d3 y, L" m if(h==0)
4 l; J9 ~- p1 B( Q" k$ }$ m4 L8 B  return true;
8 n# {1 W+ ~' v3 m$ `+ _! ?1 D else
' d+ g  [) S! h. X* n  return false;! ~2 A1 {" L4 Q! Z# o
}) a0 J% l  u5 w) o) {/ ^% b
//clock_t start,finish;
& s" d) D- M3 W$ Gint main()
# @9 @& E% F- c$ s5 Z{//start=clock();
8 A( h( d) n  N8 r5 U if(in.fail())
, {  B5 r( l2 s- K" T {9 N4 @+ f/ x% T; t% j$ I$ V, H
  cout&lt;&lt;"the input.txt is not exist!";
0 \: a. ?/ _8 r% v3 I# J/ {* P  exit(1);
. u% e8 b" B; a: e" u }0 [6 t( t. u/ w4 K- V* ?, A8 T
String s,s1;
2 A2 v' E& n7 y. c int n,g,k,*a,*c,m,h=0;7 Q) w  x/ @4 }2 L8 y
    in&gt;&gt;k&gt;&gt;g;
7 ^: N8 m. R$ j8 b3 W$ }" ^    s.get();: O5 W) x/ ~' R+ r; o
# [" Q% c& C8 ?7 G. O' K* [
    n=s.length();: @6 c' f4 u! B* i' ~. f
m=n+g+1;
! D7 v0 ^! k% |9 Q/ ~8 @. v a=new int[m];
. ^. n. `* K$ R. B, u/ s c=new int[m];
  i+ x! P& y* I: i8 p# K  W s.get(a);8 r/ D+ {" ^. e# [8 Q
if(match(a,n))7 _* q* l8 d) M/ n9 U) ~0 c
{; b# L) e; |" ~
  out&lt;&lt;0&lt;&lt;endl;4 t" L# E. t$ v8 @
  s.display();
: n9 G1 u' Y$ @, S0 P3 c3 R2 ]  return 1;  i8 j! a7 J  P/ X5 h0 _; `/ ^5 @
}& u0 K* L2 D/ Y# t) [" C" p, a1 O
do7 \$ c& I9 l* x9 p
{. f9 d8 B4 N6 R+ i
     if(h%2==0)
% Z9 S3 K. g$ q0 \      add(a,n,c,k);8 z% V! k/ V# ]2 L3 b, @$ S
  else( S- N7 e/ Z) x* ~: `* Q
   add(c,n,a,k);7 C, W& d" A2 L
  h++;
3 f* `" ^/ Z8 m4 e  if(h&gt;g)
2 f, }, |* w# n) S! R5 Y   break;
6 U7 A8 }! E9 I2 a$ W( s2 P }
) ~5 h+ m. C8 P' {8 V0 ^ while(!match(a,n)&amp;&amp;!match(c,n));
1 n: f+ N6 Y9 W, k* [; D if(h&gt;g)
3 f6 Q; c5 Q1 g/ ~     out&lt;&lt;"No Solution!"&lt;&lt;endl;! ~) |8 p% _- Q2 n$ j
else
, z4 z- E# X2 z# @3 O$ @) m {
! M+ {8 _- g, Y! O      out&lt;&lt;h&lt;&lt;endl;7 J" q6 u: [5 l- @4 r7 g1 l
     if(h%2==0)
0 \+ M% m" T/ p3 L* l      s1.change(a,n);- B, @( Z) z0 o
     else
) L) B# k! ^1 Q$ k      s1.change(c,n);
* V9 s5 e6 k6 n4 \$ H; w     s1.display();' g- c% l. u6 C8 {
}
! |; N' z6 s7 ~( b6 t! u' v delete[] a;
4 P3 V7 J# k, y4 b delete[] c;
' q" K6 B4 Q, W8 p1 q+ Z6 Z// finish=clock();% j" j9 d8 _% o+ z$ W4 A  e0 G
// cout&lt;&lt;finish-start&lt;&lt;endl;
9 c0 i6 A* l+ ^1 X4 N$ S return 1;+ I7 L* J, r6 i# Z' l6 ]* f, H& 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-7-19 12:47 , Processed in 0.442803 second(s), 105 queries .

    回顶部