QQ登录

只需要一步,快速开始

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

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

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

2

主题

2

听众

26

积分

升级  22.11%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-22 01:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>
游客,如果您要查看本帖隐藏内容请回复
#include&lt;iostream&gt;4 a- O! d5 E! O* y
#include&lt;fstream&gt;
0 F6 }$ v0 I: N7 c#include"string.h"% D; ]( I; a9 A1 U& x: B& m, j
//#include"time.h"& }5 @; N3 x8 S8 l
using namespace std;
3 E! S% G/ P! C4 a+ B5 g6 sifstream in("input.txt");
* ^9 Q4 d6 C6 {- O: nofstream out("output.txt");
& V1 x* r4 i' u. m3 y# a; {$ X" eclass String
  q( ^6 o9 T$ k1 l& g6 S{3 o% N7 \2 C) N' Y1 q8 i( T3 \' A$ ~
public:; h3 ~' n, z2 _  K) E3 I3 {3 \
String(char *s="");
1 {8 M9 N! S6 Q+ z8 _ String(const String&amp; s);
: H9 ]9 c+ b* ]* A4 B ~String() {delete[] str; delete[] pre;}
: C6 h+ t. V2 Q* Q2 C String&amp; operator=(const String&amp; s);# i3 a2 T3 Z( |% d+ O
int length()const {return size-1;}
9 l8 V( ^/ j6 f4 T int get();
( k6 Y: j0 g6 I3 ?# ~ String&amp; change(int *p,int n);
" @* [7 n6 C$ J4 L4 W6 d void get(int *p);9 y* _$ i0 m! O/ E. B
void display(){out&lt;&lt;str&lt;&lt;endl;}
2 a, R4 o( J$ v# Kprivate:
5 Q: V6 x! F0 M char *str;
  k  l* e, U# S/ ?    int  *pre;
+ T) s! D/ k5 v- F int  size;
0 e" g" N! b9 o' B};</P>
1 R( h6 u6 K/ X* ]<>String::String(char *s)& \" f9 {8 g6 D8 u
{4 q" n1 ]+ @+ P# W( _
size=strlen(s)+1;1 L3 D5 q" E# C# f. a- H! g
str=new char[size];
& x0 V7 y/ B* L5 E. ~  Z2 k& \ if(str==0)  throw "error";9 o" s8 h+ a0 w3 O5 T# I# w
strcpy(str,s);
% c+ d* U6 N- m$ C pre=new int[size];/ r! I+ g& @% y7 j# y. ]
if(pre==0)  throw "error";
8 @6 R" C5 D$ Z4 R}</P>* Q1 W6 [" ]7 C4 L7 Z
<>String::String(const String&amp;s)4 V( I3 O  W3 X2 {0 y
{
" c6 S: s/ C7 { size=s.size;
5 {* T8 H& l: _) X. t! G# S! v str=new char[size];9 ?* u- I0 ~( e+ d
if(str==0) throw "error";
3 J- U7 C: Y7 b# y' D, P0 v8 L/ j strcpy(str,s.str);
4 U- X, i! u) \+ I1 V" B* M6 `2 h pre=new int[size];: M- _+ ~3 \) s0 h* e  B1 F
if(pre==0) throw "error";$ ^, h5 p9 g2 m4 ^" D4 L
}</P>
4 N: m* F8 \3 o% E! s<>String&amp; String:perator=(const String&amp; s)0 {5 y) H7 e+ b' b/ w( s/ g
{
- H) m) A6 p4 R2 @# z2 k4 ?3 I$ G if(s.size!=size)
7 D. N- ^# s2 h9 H& b# {! j {* G+ ?; a! x0 I' m
  delete[] str;* k1 S" Q: G6 y, j. [# g/ T
  str=new char[s.size];
9 v& o8 Y7 m- d/ a; L  if(str==0). `  ?1 W$ d7 Z5 W4 ?6 d, j8 j
   throw "error";
0 M6 t5 T8 }+ F, z  size=s.size;. O+ Q8 c. L: z4 @
}
1 y: Q7 v  S0 g- f3 n$ d1 W strcpy(str,s.str);
" y% T$ X/ e5 C* h6 B return *this;! H) Q- j" _0 C7 @( F6 H
}</P>1 P) P+ c, x/ `- P+ c
<>String&amp; String::change(int *p,int n)//将整型数组改成字符串$ \/ s# I. p6 B) d+ P4 ^- r# t
{
+ ?3 P( m, p7 ~2 L) S- _ int i;
* n, {, R% K! b. S9 H3 C delete[] str;
. {  y% O" w, y6 N* {3 z# @ str=new char[n+1];/ H# O% Z* }$ U) o
for(i=0;i&lt;n;i++)
) G7 l$ o; r6 P2 Q! D+ ~7 T2 c  if(p&gt;=0&amp;&amp;p&lt;=9)
$ l" O2 T0 w& p0 ^   str=p+48;0 W& l) l0 q6 `  n9 q7 k8 q
  else. i: w2 c  }* d2 h/ f
   switch(p)9 p# n) T) n5 D; b& T+ E
   {
# x' X0 b( t/ M# Q5 k       case 10: str='A'; break;8 }* Q( i+ `# u8 f1 N. B
    case 11: str='B'; break;. B! [" S* x5 S9 g7 R3 J0 m
    case 12: str='C'; break;3 i  q9 S0 q9 V  U+ k# E" l
       case 13: str='D'; break;
7 ?# L! j. T( `, Z8 p    case 14: str='E'; break;- ^3 r! A' _7 w) B9 h6 E4 f, ^
    case 15: str='F'; break;) |! g4 {; h$ c- ?  Z6 C* @
   }
& ]0 U8 R8 m. b! Z& n# i, K  str[n]='\0';
( \0 S) Q+ S  d; y. T  return *this;2 m& g0 u. G0 x7 K1 Z( l) l' g& u, ~
}
& r3 l3 r& n- S: {3 U' Hint String::get()//输入一个字符串
( _' G9 J) n9 p1 h7 S1 w2 J{" d: Q/ T4 i1 ~0 v
char tmp[40000];$ \% @% A! P) R7 r/ T6 y, J2 ~
in&gt;&gt;tmp;% `  s+ c7 J3 D) U& |; p, }! y; h
delete[] str;  }6 A( b3 \' m' J' L
size=strlen(tmp)+1;
" @% i; y- }0 s# ~ str=new char[size];  v3 u; u$ w9 @! t( P
if(str==0)
+ w, M0 }* z* y& y$ Z% d1 c6 }  throw "error";
" C1 Z' L4 b# _- H6 P strcpy(str,tmp);
" Y% S) q  f, G; N! u/ g8 Q return size-1;
% m; ]* b: E+ J. O6 Q' Z}</P>4 G2 L' `0 s+ n" j3 |7 X! R/ c8 L  s; ~
<>void String::get(int *p)//将字符串改成整型数组( }0 Q& ]4 H5 C1 Y5 i" m5 X/ q; |
{% E1 U, P% S! H) ]( I% I7 p
int i,j;1 q0 l/ |! i4 e: Q  w; W" q/ J
for(i=0,j=size-2;j&gt;=0;i++,j--)" \) `) x% k1 ?, _7 G; b2 c
  if(str[j]&gt;='0'&amp;&amp;str[j]&lt;='9')7 z( @" v4 x; y+ w
      p=str[j]-48;1 |. a8 J' V1 g* C8 T4 E8 K
  else
, l( S8 A5 u; U4 q8 G. i/ ]  {
& t* o: x9 F; _$ x' j+ h   switch(str[j])" h0 v# U  e! F: e: b3 `, c
   {
/ K  T% D0 x( U" K! V       case 'A': p=10; break;
. C' b3 G2 W4 K" z- G    case 'B': p=11; break;) {2 h% Q0 B! ~3 U
    case 'C': p=12; break;* X7 E$ U( L# U) p) Y
       case 'D': p=13; break;) t7 |6 l/ X: p3 O9 n; C
    case 'E': p=14; break;6 M4 Y9 t# G" K& \0 H, U
    case 'F': p=15; break;: r/ ], @: S9 ?% ~  m
   }
/ k4 F1 {# @( t4 ?& y  }, U" j- e/ V  P5 C  N4 d, }* N
}</P>
9 Y, x% |7 n! B  M<>void add(int *p,int &amp;m,int *c,int k)//将一个数同其倒置数相加. d$ A$ c: q$ u8 G& w# Z; }3 T, n
{
4 u  @  T) h! @# r7 U$ y# S, s3 u. w int i,j,a=0;/ O* v4 }. D$ ?6 P9 F
    for(j=m-1,i=0;j&gt;=0 &amp;&amp; i&lt;m;j--,i++)
. f1 a! `. d" v$ W* p {( n* C1 O2 r# ^" n0 d2 y
     c=p+p[j]+a;! x0 \& B" }& K3 I9 r, I% ^' p6 a/ v
  a=0;
* M! h2 H5 W- v0 T9 u/ q: E  if(c&gt;=k)
( u( s, k- {: m- w" p  {
% q9 S# K( C3 ]) I$ M! ]   a=c/k;0 M3 o" K& o4 \4 v
   c=c%k;1 W2 W8 N: i+ K
  }
8 X. O8 h: R+ P: j, L6 k }
8 N5 g2 g" ?+ d: L+ E4 p; x if(a!=0)9 x, h0 P$ X( K; Z" ^$ O1 q
{0 ~* u, e( \& r* {# O
  c=a;
9 b, \2 S( j8 |% [  m++;/ @7 b4 a5 I& N  U2 k
}
& \! R9 {3 m6 k4 b; l+ |: b}</P>
% O) Q( T6 K$ g( J<>bool match(int *a,int n)//判断是否为回文数* t! u$ d/ b7 U& p6 _- r
{  q0 c8 ]+ m& T+ t1 u
int i,j,h=0;
: q2 k! f3 n  o$ m for(i=0,j=n-1;i&lt;=n/2 &amp;&amp; j&gt;=n/2;i++,j--)
) k  e) F: S* }" H* K {" b1 z/ v. G0 t4 Q( q2 M8 o" r
  if(a==a[j]); x/ I8 D- a. \' {6 k
   continue;- f' ^; w7 A3 n8 W$ e# C6 e& q
        h=1;
  @6 E4 m/ Z7 ]8 d3 a  break;5 N1 a, T) w( a: s2 X
}
* b( G$ B  e2 Q3 b if(h==0)
5 j! h: L* J! ~& [1 N  return true;
+ L( g! y3 W; i+ T else
; f1 c7 s9 T2 i! w& u8 @9 J. |# d  return false;
/ b- M; y5 b% i# E% k' G}1 }  d* b$ a: W# p+ G. d3 V
//clock_t start,finish;4 Q. f; E( V) e. M# n
int main()1 K& D* \& ?- M0 [. a
{//start=clock();
. B  Z. p; @& K* `6 | if(in.fail())& @; `- R$ I/ z3 D" f/ [7 r( ~
{
/ o8 s* B  W5 |6 }) M2 }% I  cout&lt;&lt;"the input.txt is not exist!";
; a0 A5 S1 ]9 {' l- S  exit(1);
* V$ @, N  T# P! J% a' W }$ O/ }% D4 j6 C3 d" ~# C) V/ Z
String s,s1;2 c1 }& G* w. i/ c9 ^
int n,g,k,*a,*c,m,h=0;
* G9 f* p2 g( m/ d% u    in&gt;&gt;k&gt;&gt;g;
5 U! c+ N" F' \, h    s.get();- {5 ~: X+ t2 Z+ p+ A. g
" D# i+ T0 m  V
    n=s.length();
7 E9 ~- K6 R( ~: a( k; m m=n+g+1;
$ O* ?( o8 U) Z$ |4 D a=new int[m];' v: ]+ N  n9 a9 A1 H7 O$ ?2 n
c=new int[m];
5 Z. B6 a" Y4 G2 U8 ~" X s.get(a);
0 K5 }; s. |7 y0 W$ c if(match(a,n))  l, b6 d% ]- V0 z- b' Q0 G
{- A( N; ]) I/ g
  out&lt;&lt;0&lt;&lt;endl;
' B$ \3 m; |- Q, f  s.display();
, s+ `9 p1 m# @8 M& X! b, Q  return 1;
" [3 \  r( D: g }
; v/ v& U" Y- _/ ^9 P1 @ do
: H: n% e# V; W7 v {
9 f# Z& q" J" o' Q- ~) @$ M     if(h%2==0)
8 S5 Y0 }4 j+ X* w  D0 w& T+ D9 [# m      add(a,n,c,k);3 b: k1 L& d" Z  X- S5 \
  else
/ z* l% @* M; t: [' M( \9 ^   add(c,n,a,k);
% T0 O: ?5 J1 M3 \! m4 g  h++;1 s8 G% p3 q, ?' b7 L' }" V3 h, g) i
  if(h&gt;g)
( k% E8 u) Q9 D9 R3 W( g3 s- n; I   break;/ b" Y: v7 k2 T8 p- v: l
}
  z, N: l3 f$ S while(!match(a,n)&amp;&amp;!match(c,n));  j7 u0 Q( o# c7 I
if(h&gt;g)" r- p. F& a. B& L# _. x$ }. m9 |7 \
     out&lt;&lt;"No Solution!"&lt;&lt;endl;9 J& u' R3 |& P  N% r; t% n: j
else" G* J) v! l) i) s% c1 _& Z
{& r! g- X5 S6 r! W7 k; ^; H3 \
      out&lt;&lt;h&lt;&lt;endl;
( k9 n: v* A5 d6 G' ^  h. P     if(h%2==0)
$ P1 D& f* R& y8 W& G: z      s1.change(a,n);
3 S$ G7 n* i' [) ~) c  [  F     else
, z$ Y/ w) c( C" h( y. @' A      s1.change(c,n);* G: Y& E! H3 A) b" i5 \
     s1.display();+ b# \  G* H1 G: B- n" @5 N
}/ r$ K% H  U* o; T" l% G9 H
delete[] a;3 Y6 A9 x" A# O' J
delete[] c;
, D3 v% S& ~. t5 ^// finish=clock();! Z, _4 a3 w' W4 \, S
// cout&lt;&lt;finish-start&lt;&lt;endl;5 `9 e( @' j1 z! Q6 D+ Z
return 1;9 d. Q, f3 _; A
}</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-4-18 17:03 , Processed in 0.529886 second(s), 105 queries .

    回顶部