|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! H1 k" W" Z# [8 r2 @
这几天我在忙着编一个问题,我用了一种方法编出来!) |/ }" q- f2 C8 ?
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. I. M: G4 \3 ^ ^! Q
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 " \, V3 b6 X; k/ P. p3 [* G0 I
* ^" b: o. E$ i
: {4 x" N9 m. G4 ]% X
题目# C; b6 a" L% G! |% B" P
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 t6 F- s) C4 S0 U$ I; |第一种方法:利用循环链表, ~% V& d( {0 o' \/ J
#include<stdio.h>1 x7 V6 R4 a" O+ c4 N" A3 | S4 V
#include<malloc.h>
9 x. Y' v: [3 o# i8 e#define M 8 //共有8只猴子) i# i# r& e+ \# V
#define N 3 //数到3只时退出第三只
& c6 e9 \. F* R* z) Ptypedef struct monkey j+ x% U( ]' b, ^" J- ?# S9 `7 D
{int number;* |* a' u/ b0 y( [: s# P% l$ m
int flag;- }; b2 H7 h2 u& X4 U* ~% ^
struct monkey* next;9 X% [8 h$ _: C' @
}MONKEY;5 X, r/ _" i' g& \' d l' X$ d
main()6 g6 M1 |+ Q% I9 z& b. w) z
{ MONKEY *head=NULL,*p,*s;$ f5 n# p# ^0 @+ D) ]
int i,sum=0,count=0;1 h U' E1 _7 N+ S7 |) }* M3 ~( X
clrscr(); //清屏- a( [+ o. \6 m6 S7 Z( X( e( a
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 U' W& p" X% Q p->number=1;p->flag=1;
& F& C) z1 I3 Y% h0 r! g8 d, V p->next=head;
! c4 ]: T! _& V; j8 V* R. j head=p;+ e- J1 Y7 A3 V _4 F
for(i=2;i<=M;i++): h3 j. l* d$ _4 Y" t& J( j' x/ F# \
{ s=(MONKEY *)malloc(sizeof(MONKEY));
" {; ?2 D; L5 U2 K- o u s->number=i;s->flag=1;0 G# ~0 C4 H% l& h& d; y
s->next=head;
7 O) v/ ~+ _* l) y2 m p->next=s;p=p->next;, T- |: g' Q( @; x) Z7 l$ _
}
; z1 \" ?3 T( H3 w8 P p=head;& x$ n* ]2 H$ _8 _
for(;;)
9 ?' A( `" x8 p {if(p->flag==1)0 j8 L$ R( p! `2 [9 _4 s' I6 o8 G# T
count++;' j/ w% P; U+ g7 T# |0 g
if(count==N)
5 {% k- v) K# F8 m# {# J4 _ {p->flag=0;
8 I9 K- b2 w! V# |5 Z: ` m count=0;4 _, [. x& R0 v
sum++;} D0 \- y- E0 s# Y
if(sum==M-1)+ W/ c# k$ A+ o1 ^
break;3 m% v/ [0 @ G* [. f* l
p=p->next;
' B& Y1 r3 n( j& [; J }
# L! Q6 U% q9 a4 U7 c p=) A5 x/ F% \: M, l4 x* O
head;
5 k. V* V6 |1 ~# r- C8 C5 e for(i=1;i<=M;i++)
% p& C7 u: b; D8 B& P { if(p->flag==1)
1 V* T* c3 s' l printf("\t%d",p->number);
! [( i/ j) A( R p=p->next;4 ^3 ?5 b, P) ?2 E9 |& S. s5 h/ J
}
/ c/ ~: ~# J8 r/ Y: ?0 u
2 e" I8 X% K2 ~- G! n
- X& |- p6 w$ c6 `* c" w/ W
! ` F0 d% E/ @ Q$ \ U}
0 J, H/ X& J4 x8 x+ ?& p: T第二种方法:数组% k* I E0 a' n# t
#include<stdio.h>0 Z+ E. r- P) b7 H' M8 _# K+ p
#define M 8
" P: ?0 l2 M4 g4 b. gstruct monkey" w, ]- W# w; Z" M: I/ y
{int number;* f, v8 k) H4 t4 J
int nextp;
, j2 E8 u1 P: @$ V) J}link[M+1];
3 I6 J# F. [' c2 r
' q! m- ^7 C7 E, B( \, \- d* T% Cvoid main()
3 |! {+ T* n" z0 D- H8 i{int i,count,h;
8 p+ s) \! z5 k, {5 l+ i; Wfor(i=1;i<=M;i++)- i$ e' z* Z2 g6 G# F
{ if(i==M)7 j2 N! |% u' E5 a" x) H" d
link[i].nextp=1;! E4 D$ F* P; E( W
else" R/ v, M6 j/ w5 |1 N Y
link[i].nextp=i+1;! ^! Q# d: g' n" @
link[i].number=i;
1 ^- H" Q, \, ?% D" U) l: }}
& \( f5 e6 P# j5 }printf("\n");* n X+ [9 k' _; H" @% ^
count=0;7 o' [* K1 h# q* i, S P/ A) g
h=M;
% ] Y) X) P* w" B4 V& mprintf("依次退出的猴子: \n");
3 F; `/ f) W% [$ D B! fwhile(count<M-1)
& t. ~. }- [0 O: I' K1 M{i=0;
1 ^0 p- N) F, Zwhile(i!=3)
; n0 V6 ]# K. D1 M" V% X" K( t{ h=link[h].nextp;3 }9 u1 E' n( K( ~; t% F/ f8 ]$ W
if(link[h].number)* Q: k! s& a; i5 F8 _
i++;}
5 j# E, _, Q9 V% ^
' e3 k- ]- I( ~, k& ~- z' L! V& Q; F) u Eprintf("%4d",link[h].number);" a3 h# u3 E* a/ g7 o# ~
link[h].number=0;
; W" j7 \/ w. f' tcount++;
2 h% U# M. N# {( `$ q}
" Z W U$ H# f6 y+ ~0 b' j( Y# b9 ~& a+ `/ q; e
printf("\n大王是:");8 _( u0 B$ U) n+ {: R/ M) L
for(i=1;i<=M;i++)
/ K3 Y# P3 i$ Y$ c8 [1 L6 [ if(link[i].number)
# \1 V, | z, O& }$ h9 `! b1 Q2 g0 y printf("%3d\n",link[i].number);/ `$ q% a" ~8 t5 {; _3 F0 y
" b. g K3 ^/ P' b/ f) N
: z0 w# ?9 [# a, x2 q3 ]}
: W: q7 p! W$ ^6 x: F1 `, A1 b3 S" l第三种是普通方法for循环' V& D/ t1 ?8 T2 r
#include<stdio.h>
0 o: ]4 g+ M0 H! Evoid main()+ w7 j7 M2 O, ^! G1 N
{ int i,k,m,n,num[50],q,*p;
) X: r$ r+ J9 d- f- g9 F5 p clrscr();) B! _# K+ x& W3 x6 x7 k
printf("input number of person: n=");
/ r5 z5 {' d* D1 @' n scanf("%d",&n);
$ M4 M5 r8 [3 J# e Yprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只, g! U8 {% _1 q9 Q% r6 |% R
scanf("%d",&q);
) p+ b6 \% G" ]$ r; Q p=num;; r( M3 r, f |
for(i=0;i<n;i++)- q. f+ r( |7 c6 l7 C7 j
*(p+i)=i+1;
/ O) n' P7 h3 M- c- j i=0;
9 W( L X$ \# M# ], J k=0;
0 D* J y A D- [0 e6 z0 b m=0;3 A$ o' k+ W7 y! N
while(m<n-1): ?6 D# e; ?. ~7 r+ g
{if(*(p+i)!=0) k++;1 c" d) _, \/ Q$ E1 r
if(k==q)
) i: Z Z& s0 [: j { *(p+i)=0;
$ D1 @' e9 ]/ k6 P# ~( | Y' ~ k=0;6 m, i% ?# D5 n: \% [% B8 u( i
m++;* {: q6 T" b2 U. w
}$ z+ L$ G9 i& p& C' t; O+ m8 U2 F
i++;
5 k* f$ I) B1 P) q# Q6 e if(i==n)i=0;5 B( M1 T4 a5 @ [$ l
}) `, \5 M# Q2 N: W* u0 B
while(*p==0)p++;
( L$ k1 |+ F* \7 n4 n1 s F# t printf("The last one is NO:%d\n",*p);
. x% ^/ l) M* P8 `/ H, v getch();0 X7 c& J9 ]3 L, P, [
- N* Y( E, U! t, m5 ]/ w} |
|