|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!2 s) o& Q6 O. |4 y/ w$ L
这几天我在忙着编一个问题,我用了一种方法编出来!" v! o0 Y# p# }. _' e3 I
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 i+ z7 D; w( K4 H( y* f注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
3 w1 ?' z7 w' _4 l( S1 B& w8 ?7 k. v
# k" C: U2 f" j- H4 ]# U2 l5 L7 \% ~& S; V$ h
题目
6 \$ q0 q2 f# W0 ^% L/ R0 c山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。, e0 ^) T$ D }# U
第一种方法:利用循环链表: d' E+ G7 ]' a$ Z# e F) c, g4 X
#include<stdio.h>
2 }7 g3 {. F- N$ F; H" [#include<malloc.h>
& Y9 H/ ? U- u) K1 _$ n& Q#define M 8 //共有8只猴子( G; G" p6 E) T4 X
#define N 3 //数到3只时退出第三只
H3 f1 U# f! w) _4 Gtypedef struct monkey
4 [* N; y O- k, H{int number;8 G. h# \) v3 |+ U
int flag;( q( G! y( N# A! h' e( D
struct monkey* next;: D% N; w6 D% \5 B! Z1 s1 z+ V6 d
}MONKEY;
& H3 Z( g. B& R9 ~main(). b0 o0 F7 |9 O" f, ~
{ MONKEY *head=NULL,*p,*s;; c( ]3 z3 l+ b: Z+ t
int i,sum=0,count=0;+ q6 m$ }: u% n ]+ A% e% {
clrscr(); //清屏
2 o. I% O0 D- b1 S# C" n: B+ [ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) i5 g( p2 E/ U" u X5 h+ ~ p->number=1;p->flag=1;, d: O+ h0 e* }+ u) L2 t
p->next=head;
1 U, z% G1 N4 `1 Q* H' S P head=p;) y- I- a% `5 G5 ]
for(i=2;i<=M;i++)
/ ^) Z1 w* [( v2 g E; ~ { s=(MONKEY *)malloc(sizeof(MONKEY));0 z8 w1 ?4 y+ }
s->number=i;s->flag=1; ?" i! h6 v! |" Y
s->next=head;
7 e: c3 V9 j2 e2 N p->next=s;p=p->next;
; K5 D4 f2 Y& L$ `5 R }
I, }1 [; [; u9 s0 v- h p=head;/ ^+ I$ I. r& j0 p h. w
for(;;)2 k- i! O# A* ~1 n3 B% U. M0 h
{if(p->flag==1)
, p6 A) H, C; l5 ]+ K5 Q count++;
1 Q3 I" R2 F% U$ t# K if(count==N)% K% j$ A! }0 N! Z1 J
{p->flag=0;
- S9 ?( d0 \, L, j! L1 q count=0;
n( W" Z! ~) c: u. x9 z$ u2 R sum++;}
% S# A- i; E1 C* V$ g# Y7 o) v if(sum==M-1)
2 G9 w' H4 b4 H2 c' Z/ N) E, d5 @ break;
+ Y# j% O+ n8 H, G/ A; ?& j p=p->next;# M; V; _' r- ~& m& K. S) s2 f
}
1 ]2 ~6 V0 G7 O- V3 ] p=
* ~/ Y) W0 a# i! y3 E- H4 q' p" p head;
8 d a; q$ l7 s$ @4 Z/ t for(i=1;i<=M;i++)8 a: I! p- m) M7 ^. \0 B
{ if(p->flag==1)) t* m* P% w3 R3 T
printf("\t%d",p->number);
9 G( W+ I* p0 J% T- e p=p->next;
$ o3 W$ r, ~2 M0 z5 S! d ]+ W1 w# r }
! {* Y: v8 J G ]
) r6 M) M+ ~. A4 b4 d( p" t$ F. w4 E: h6 z; k; f
- c! J; O1 w, }2 w
}
k) p7 S2 h/ k8 |第二种方法:数组
. T1 G( W0 |3 ^#include<stdio.h>/ H# s! Z3 O; f" j& B/ x i" }3 P
#define M 8
8 I# k0 T( n: n5 Pstruct monkey
( d, c- |. Y# u) y X5 M( H{int number;8 ?5 y3 z! g" y/ P9 {4 k- w. i5 J
int nextp;3 F9 P& ~; y) _& |
}link[M+1];; j1 y4 l5 _2 k6 E
$ ?5 C" `- N2 Q/ I& Gvoid main()
4 Q4 ^- T. b7 T8 }* K{int i,count,h;' q6 M. n. }' r# @, F
for(i=1;i<=M;i++)" _) G. [2 j5 m+ t/ b( y4 O% q
{ if(i==M)* A8 ^9 q4 \. Y+ s0 J* N
link[i].nextp=1;
+ b1 e1 b3 G$ Y1 l9 p( ?( V& t else
* Y' ?9 C j& W5 f |, m link[i].nextp=i+1;" d: i( T1 }4 n8 u
link[i].number=i;& t9 b2 Q6 u( {. q
}
; l; M9 j; b: X/ a5 A3 Q, Eprintf("\n");' D; g0 [& q3 ?( y& m) @
count=0;5 V! C% T% r& Y
h=M;
( p8 G( s7 M+ u: _( \' v( l4 sprintf("依次退出的猴子: \n");0 S/ L/ b& i, I5 v' f
while(count<M-1)
# B: o1 ^8 d- q5 w5 x' a* {{i=0;. l9 h( e& E3 ]. s$ a" F4 i5 F8 Y
while(i!=3)
5 ]% E6 G! L& f$ ^{ h=link[h].nextp;
2 E% F, B/ n& r. @ if(link[h].number), p, _& n# O' ?. ?! I
i++;}1 z! Y" i7 I- W' I d
; C" s1 y) M$ c! p" [+ O( C1 A; lprintf("%4d",link[h].number);: a9 o3 {, K; i7 l6 x
link[h].number=0;: S7 e2 w. r8 M' S
count++;
! h: _8 U+ _1 T7 M& U}
% o0 ^8 N: j0 M2 [, n, b8 E" N; G+ h( D" F
printf("\n大王是:");
9 j/ a; J6 _: G3 q' G& p for(i=1;i<=M;i++)
4 H' L+ |, ]: g! I: l" S8 I if(link[i].number)) |2 ?5 p7 `6 s4 z7 Y
printf("%3d\n",link[i].number);6 J7 D$ A$ l Y! A# G2 M! z0 c5 `
5 `$ K% k% A6 ?! h- } y Y1 I F8 E, m
} $ T0 ~* W& _) W
第三种是普通方法for循环0 B ?7 D; j" _3 C7 f. g
#include<stdio.h>
, L# ]( H0 I* G- O( N' [0 Z6 Ivoid main()
. m3 m, E7 j O{ int i,k,m,n,num[50],q,*p;
8 o3 t# f9 P( O! J3 n( L# O# ? clrscr();. n9 D9 Z! W4 J, f- J$ l4 v% y
printf("input number of person: n=");
3 x) r$ C9 z& P) u/ {0 B scanf("%d",&n);
( r- B3 r, i' y7 ?! B/ U) Qprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 g4 P) l- L, G" z6 r0 ?0 _ scanf("%d",&q);4 u' [! N6 v+ Y, |
p=num;$ D5 ^" V9 F7 G: s, J7 q3 e
for(i=0;i<n;i++)
9 D# t! [" h+ r0 w0 w ^! H *(p+i)=i+1;6 r6 x$ h* u2 w4 v3 x7 p
i=0;1 c) v6 a, V& \# Z
k=0;+ c8 B4 r. j3 X2 V- C7 `8 h% P
m=0;
- [9 s- m- W2 ^6 P5 ~ while(m<n-1)
* W+ @% y& [: ~ {if(*(p+i)!=0) k++;
8 H& K8 A% g* T( R! m if(k==q)
7 Y6 f! v7 f5 T3 F: U { *(p+i)=0;7 Y- y# A! D- \6 m; ?
k=0;
( e1 s8 o3 N( ^3 j/ u% m- J- W m++;# \2 @$ o) e" K% d t6 B7 u
}! R/ ?$ `$ M1 y g
i++;
8 l3 w; ]4 `9 P8 v b' Z3 M6 i if(i==n)i=0;7 W4 n; U# M& d& H/ l" z; e, u$ V
}# w; c$ I5 w, j& g7 y8 s
while(*p==0)p++;- o) x& b# A$ ]" U
printf("The last one is NO:%d\n",*p);5 H" ^$ v/ e0 a
getch();- D) } x& A4 s5 x( a
" U0 m7 W4 O# D- [$ q: P
} |
|