|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& S$ U7 o5 ?0 _& F8 N8 }- y k
这几天我在忙着编一个问题,我用了一种方法编出来!
% ^6 ?/ J: i8 i: H4 ^4 e但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 P# \2 `! x* T, e& l1 M
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 2 h5 O9 v$ I1 g2 C7 a
9 ~) m4 U3 |+ W `8 X
+ j _7 s5 O- f
题目3 T: _1 H6 v4 z- ?- F1 e0 s/ }
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
( b& r1 \0 R2 a7 o7 N: C) |第一种方法:利用循环链表3 J4 p# b! Y( L+ k; u! I7 T
#include<stdio.h>
/ I- L2 j- @# L" M#include<malloc.h>
% m, R6 X& |4 G; ?) [#define M 8 //共有8只猴子, i) ~# i8 ?1 T0 g! M7 p6 |. c
#define N 3 //数到3只时退出第三只, W) q$ o6 o5 B: d
typedef struct monkey
7 |/ G- B. h3 f$ [% A5 l{int number;" c* n; ~" |$ f& g
int flag;8 q. i" L. d/ F& Q5 C* h0 `
struct monkey* next;, [ X3 ?: I& J: P8 b6 g: D$ G
}MONKEY;; }! i9 W' x( t& h% T
main()
$ M6 \! V# P" t( F' a{ MONKEY *head=NULL,*p,*s;6 ^( S( u; v; X. I! f& Q2 w
int i,sum=0,count=0;
% \8 _: B! n& x8 k clrscr(); //清屏
) t3 Z- Y* a! M$ F, {, o. v- h7 Q p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
2 t1 O( M% f& Z8 S p->number=1;p->flag=1;7 B8 k( }) U$ h0 L* s7 `
p->next=head;
+ |( D Y+ d+ M: D; b Q) D head=p;
9 @3 \* k# o: m& T* @ for(i=2;i<=M;i++)
" L. ~! b' i( K; h k' Y { s=(MONKEY *)malloc(sizeof(MONKEY));
. H; D- t N* y& ^, f7 l6 X s->number=i;s->flag=1;
% T \3 f. |7 w& l) v$ a: q9 p s->next=head;
3 n' h2 H7 h( E3 Y4 ~ p->next=s;p=p->next;: m' F3 ]% ~! m( k! C, B
}
( s! F) k3 Z: D0 ^' n p=head;. w l% }; F* c
for(;;)
! T: B; e/ T& w( A {if(p->flag==1)
: o) M t0 s* y+ I+ { count++;
9 i$ ]0 [1 u3 z+ w! z- s, L if(count==N)9 U/ ~1 H' A6 ?5 k
{p->flag=0;
( u h. p8 I x+ [- l1 h count=0;
4 D( U# _1 d) _1 d& ^. D sum++;}
+ A0 n- }. l s2 Y1 m9 Q6 T7 R if(sum==M-1)
6 B% J$ q) }# ?& a7 o break;
1 X# {2 b! L' S2 S- y p=p->next;5 s S) b4 `1 a# l: a5 k
}5 r* a; b( n D0 `+ `
p=3 J& R1 H j$ p7 G) _% |
head;, e$ I* t! Z! ~2 p+ `: h0 p1 n
for(i=1;i<=M;i++)
6 S1 {; i. F0 T2 Q2 a0 v0 C { if(p->flag==1)
2 J j: h6 c5 G5 ? b8 \ printf("\t%d",p->number);
$ s j f9 r$ _7 G p=p->next;
: @9 v H* U( B! q* x0 J$ d, k }
5 I% h# I+ k9 t! C4 u: h) S# ~9 `. y" O& ?) y1 D8 F
4 }+ `! n$ z; B2 i0 c7 H/ ^
. J, t7 y* ]2 L% F, W5 n}
* Y5 t' W! K2 S第二种方法:数组
' _6 E$ y2 v0 L3 G/ B' h& ^#include<stdio.h>
# X8 `6 h, c; ^* d* C& _! H j4 x#define M 8- A2 b9 _1 u ~ a; Q1 Y9 Y% g
struct monkey
$ s- ]7 { a3 e; e5 Q Q! y{int number;
6 I y" ?: N+ _4 Tint nextp;2 q9 l7 K k3 [# u- I" U
}link[M+1];
, T8 S, D4 ]2 V- F1 U% ~$ K+ X( K5 x. m" Q8 _; L0 ]$ [
void main()
5 b. ?0 c" j; f, z" _. U9 z6 B' {{int i,count,h;, x, \* x5 w% V& t- a
for(i=1;i<=M;i++)
; u9 e, R, G8 [# o8 [2 D{ if(i==M)
( j2 `2 J8 G6 f4 \' C1 k link[i].nextp=1;
7 b. x8 c) L+ q else2 W* f( G) M/ ~0 w4 U
link[i].nextp=i+1;
0 Z8 R+ I5 {- w5 a c- x& R1 }$ m link[i].number=i;: j1 C7 N+ h* u
}
- Q; I' T6 m3 U0 C+ pprintf("\n");) b; Y+ y' o( m0 ^$ d8 f
count=0;" L" h+ ^3 L9 \$ A- t; _( R8 x
h=M;* I* [0 p& T3 P( ]/ i ~7 @7 U! c
printf("依次退出的猴子: \n");
& K8 H5 m/ c+ p! Ywhile(count<M-1)$ W$ M. T! x6 ~9 t. d+ j+ E7 A; }
{i=0;6 o2 n8 j0 Y; t8 z6 D
while(i!=3)
7 H- M1 P( y8 ~{ h=link[h].nextp;
4 X7 F2 D4 m. n* r$ f# y$ j4 y if(link[h].number)
8 L6 j3 S+ s3 L4 ^$ D* B i++;}
4 s' r* d( q- l0 f, z4 V: ] ~. R; O) B* v! O7 b
printf("%4d",link[h].number);
' M/ ]! k: C8 ulink[h].number=0;& W# B' L: Y9 b$ K1 T' j. N
count++;7 T( B F% H9 r% b" O- B" ~- m
}
& t& N+ W2 a/ ]6 A: w4 v/ Z9 O: v; J" v- R/ l/ @% z
printf("\n大王是:");1 ^ k* U" _6 d
for(i=1;i<=M;i++)
$ q8 C: [$ e: x- D) F- i, ] if(link[i].number)" F! J. ?+ X* T: n- X, G7 T
printf("%3d\n",link[i].number);
4 p4 [1 ~! W7 \) k5 B/ K0 s( H
3 g- \. c) ?. G) D- e, B% y2 t6 |& ^& T. q
} / q7 h5 j# U4 T! I
第三种是普通方法for循环7 h% a* P6 J2 W) y. s B
#include<stdio.h>
* F8 G. b. [+ ?& R! s6 uvoid main()
8 [# i. u' H% T! n{ int i,k,m,n,num[50],q,*p;# n( D! ~) p5 b% i
clrscr();
. \' o* |: W7 j! H. n6 {- E6 G/ n printf("input number of person: n=");
, r& u% l# v% L( o% U, ~ scanf("%d",&n);$ `& A+ V: c8 n! P3 w# u+ ?
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只' D `4 w4 U' n# K1 |9 n& L7 x7 c2 [
scanf("%d",&q);4 }, |9 t' u& U0 L
p=num;& Q3 u! b, `, a7 d
for(i=0;i<n;i++)
i* j7 B" P9 b1 |2 O3 l. y" J: ~ *(p+i)=i+1;0 [" z' Q+ T* c
i=0;5 o, c4 Q) \4 G, N5 }
k=0;
9 S- P9 g4 P3 D( C, D3 l! _0 }6 K: { m=0;
1 | p& ~% k( W, T! A while(m<n-1)* k) s0 E+ R6 x( f3 Q w2 I
{if(*(p+i)!=0) k++;6 B. s: Q5 n/ e4 r4 |; d9 [
if(k==q)+ U$ F; `: @: j/ S( `+ g/ X
{ *(p+i)=0;& W' w8 _! [6 \. r( k7 y
k=0;
8 D, h) v8 }5 R& Y; u( x0 X m++;( l. N; Q( o( M" I- h6 V
}. W+ I( d% d# a4 r" s" B7 [ D% m
i++;
$ n9 |# ]5 r0 u; c if(i==n)i=0;7 t* ?4 d1 _" M: q# V
}1 d7 c9 X: c& \+ z9 Z8 K* r. S
while(*p==0)p++;
# E& H; j' z2 T% L printf("The last one is NO:%d\n",*p);, F* Q# g0 d+ i. d0 {/ w
getch(); p Z' I: q7 d! e% N8 D! e" z/ S% |. S
& S9 ?' m0 T8 ^( ]
} |
|