|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!+ |* O* |% |3 d1 d5 L+ H3 c$ Y3 f
这几天我在忙着编一个问题,我用了一种方法编出来!7 M# o p3 i l |! F- a* m
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 w& D( Z1 n- {5 P8 B
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 % D2 m8 v- l( @6 h$ ?
8 o+ D" J, U" ]$ z$ K! _& U" Q7 l
题目, h! G% H2 g$ K) y( ~/ R/ |
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
9 I+ _1 y; c8 S( D第一种方法:利用循环链表2 @; S5 R! t# A( ?' R
#include<stdio.h>% k, ]2 Z' e& k- W
#include<malloc.h>3 ^5 _! C, }" L+ S v. N
#define M 8 //共有8只猴子) O: n0 Q o5 x; ?9 Z5 K
#define N 3 //数到3只时退出第三只
% [0 |4 g9 ~- j4 f. q0 ^typedef struct monkey
8 c$ H+ v' A' |5 `+ K" a5 g; E8 Z{int number;
! {9 B7 j4 x9 V E/ X0 P; cint flag;3 B+ b- o# k& X) P* u! _, v6 g& ]
struct monkey* next;# c5 j- F; ]) k% l: L: S
}MONKEY;
# R+ S4 B* r5 ~main()9 L h- r7 c* `. z/ [% ]) T
{ MONKEY *head=NULL,*p,*s;
: H7 v8 l0 `. z, a: @ int i,sum=0,count=0;
- W6 y4 g1 \+ n2 }! u0 ]* n t clrscr(); //清屏! N v; E4 f0 {9 v
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存, M, z# U4 _( ^# D
p->number=1;p->flag=1;
* I/ A4 j; V: f9 @0 } L p->next=head;
+ E- Q' L" B8 Q6 y# h head=p;, @& S* U: P: I A9 v, a$ j
for(i=2;i<=M;i++)
1 e8 e$ e' Z% [9 e2 f( w { s=(MONKEY *)malloc(sizeof(MONKEY));8 o8 X9 P, w$ C* L0 C# v4 }
s->number=i;s->flag=1;/ D$ e; P. Q% k2 R* a- N) H1 v: A
s->next=head;
+ t5 D* U2 [5 i/ h# I; _ p->next=s;p=p->next;- e% D, J' d7 g/ K( [/ j- x
}
* K9 j, R _1 B p=head;) ^& d% I5 H8 U! I
for(;;)
: \) L' V- w* P0 T {if(p->flag==1)$ M( s# V/ X5 w9 k: o' Q' D+ @
count++;2 q$ x3 G7 G, N4 K2 j" _+ W
if(count==N)
1 Q9 Q/ Y/ O! u6 q7 @! d {p->flag=0;
+ ]5 J9 l* h. R, p count=0;
* P3 s: t* P- t sum++;}* \: [3 ]4 c0 Q5 ]2 b( k9 u! x- S
if(sum==M-1)
! Z% T* { p, J, E, L break;
" [0 E: H' k& {# S8 p* @ p=p->next;* c3 I3 T3 D1 V3 J: o: r# d
}- k# Q, R; D, V, b9 Z, L7 m
p=
8 ]3 ^0 }- |3 w0 ~7 U3 h& M head;
! ^/ s& W" f$ j; B" R: z1 c' J for(i=1;i<=M;i++)2 n6 s5 w+ s8 N
{ if(p->flag==1)
0 D5 K! V3 O5 |+ i% }; M printf("\t%d",p->number);
7 X* B: o( Z4 j p=p->next;
: H# z* u6 h/ N; s- n1 T }
! O' Q# q' ?% U% b! [% D d& _9 d
7 X; y. j2 ], J% K) i" ]5 A
" O i2 [7 k3 D5 C8 c
; P0 l1 J3 I3 D2 \/ q}
6 Q5 `+ F7 ?9 O0 g, L第二种方法:数组
% G$ p9 R0 ]! G#include<stdio.h>+ s7 c* } E1 N
#define M 8, K2 [0 o s9 R) b! t9 Y3 q* }
struct monkey6 A J# U1 t" O: T; o
{int number;
D3 B# e2 c; K' N6 Tint nextp;5 s9 l' u1 G2 [
}link[M+1];2 E _. `7 {) I5 L* H) _
% I# w! d) A: j
void main()7 p+ g! q, l7 W: W5 g" _ K2 A
{int i,count,h;6 N+ f5 q9 S# E- O
for(i=1;i<=M;i++)
+ W k5 g+ P# i+ N{ if(i==M)
0 ^ _. }6 L- v9 N. @ link[i].nextp=1;
, i5 j" i2 ~3 L/ b$ X3 X else' N: c" r6 Q6 S+ a; T: ]
link[i].nextp=i+1;' ^3 V2 U0 w9 R( T% k! b% H
link[i].number=i;
6 r5 V% W) [4 Q5 ]1 K}
# \: G- D! h; g: f8 _7 D* W9 nprintf("\n");
8 ~ J. Z3 j* D% {# A3 T7 _3 k: J* ycount=0;
L; @1 _8 z) D6 xh=M; \2 W0 {6 Q n0 ~# m) o
printf("依次退出的猴子: \n");
. R/ q8 R! B, d5 ~while(count<M-1)
+ l' \/ n- A. X# ^) J{i=0;
# c6 S) @ e! ~+ a$ g a7 [) {9 fwhile(i!=3)
. L9 Q$ C8 f" Y1 |% n# o{ h=link[h].nextp;
8 E) S! k2 n% f+ D v: U if(link[h].number)- A4 g' p. C U! n0 n
i++;}% q$ ~$ t- w2 g0 I
b$ G3 ~8 f, s, Bprintf("%4d",link[h].number);9 k" m E: R- f! y4 U2 b' H- {
link[h].number=0;
7 y+ \4 K' Q# q6 Icount++;' j3 l$ F& D" y0 k+ Q& P1 G0 \
}
0 U% F5 m1 v, |8 M) f: Q4 ^ Q
3 x9 m# H) J9 z0 M& x3 M Rprintf("\n大王是:");( I# U H, F' Z
for(i=1;i<=M;i++)
9 l6 {, _# S# `. [ if(link[i].number)
" R. R. b: d1 s7 m printf("%3d\n",link[i].number);
: [6 P. e' x& ~6 Y2 l4 S- i" C k. ]8 r; \
5 G4 P L# c# U}
4 ]1 f X7 c, J1 B% }- c' V第三种是普通方法for循环
; x# o9 }( y% R5 V5 h- k$ {( X#include<stdio.h>" C" b: N5 i+ c E
void main()1 T% @1 D9 k8 u3 H5 ]4 y7 |
{ int i,k,m,n,num[50],q,*p;
2 v" B. m# F/ r" z8 A9 z' k clrscr();$ J. U6 J) z+ k( {& i1 A. z6 a( S3 Y
printf("input number of person: n=");1 O9 z: |4 j4 d# Z% i8 z0 U6 W/ @" Z
scanf("%d",&n);$ B7 H* I! x! Y! _, P R/ y
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 J! k! ^1 j6 l5 d scanf("%d",&q);
5 r+ g' K& ~8 N" e) r- P0 T9 n p=num;3 Y, q: p, S' U* f5 M6 S. S
for(i=0;i<n;i++)0 p& O8 O4 B# o8 }0 F2 K/ y
*(p+i)=i+1;
( o0 @3 G' f7 b9 t1 Q2 D% r- c i=0;+ T, L! {9 s" ^- D- P0 @
k=0;
* z6 ^" [7 F# a; K$ |$ K m=0;6 w1 ?, Z) G3 t4 D
while(m<n-1)7 Q1 F# ^0 z0 v( H9 s8 @! w
{if(*(p+i)!=0) k++;6 f8 k$ J S2 k2 t! [
if(k==q)$ e6 V$ ^* L, ]; t
{ *(p+i)=0;6 W9 R0 L% R! [
k=0;
, p. I q$ h7 a1 s1 k! j- \6 D m++;
! y9 D0 U. J6 _2 V1 {8 P }
7 A3 D. R1 i) R5 T! h7 E- p& [$ J i++;! z3 f6 u1 z. I' R
if(i==n)i=0;7 G1 o+ A" z/ | s( Z7 {, s; ]
}( b* x: s* I6 D
while(*p==0)p++;1 G; F5 }& x5 Y* z
printf("The last one is NO:%d\n",*p);, B- l5 o: c1 p4 d- y, X
getch();: p' g8 p! t: s& H) o
0 |$ l# }) p" o& i2 n5 M} |
|