|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 p: l' J; X9 V& h# x# B
这几天我在忙着编一个问题,我用了一种方法编出来!' s5 c, Y1 s& w
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!# {: o: Z* Q0 e8 v _$ t% F
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
5 L; J- O' B/ m6 O1 s" \& w$ }+ f+ A! L# h9 a% @
6 e1 o$ w' K$ _4 u; w3 g# r1 q 题目
$ z" E' j& ], n6 W. w3 ?8 N# x5 T山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。9 U, E! s q5 M ? Z
第一种方法:利用循环链表
9 f" o- W8 m" Q# \4 L$ U* g#include<stdio.h>. x! A5 J, N) V, D" s! c C% ]
#include<malloc.h>( r6 j2 N4 O+ e8 o$ y
#define M 8 //共有8只猴子6 { z7 a: X! H; [- S
#define N 3 //数到3只时退出第三只# Z( r) ~ S1 j" U# H' N- D, j4 t
typedef struct monkey7 k6 n. Y8 \* J8 ]
{int number;) h$ Z6 E( O9 j( _ R
int flag;4 z; g. Q7 @4 T0 J* u% S
struct monkey* next;
& r6 ~1 U' _# L}MONKEY;8 I5 F- f+ C0 ^6 Y- D3 @% W
main()
8 B; l. f( k' ]2 q4 [7 k Z8 [, v0 D{ MONKEY *head=NULL,*p,*s;. ^# o0 J. I) R
int i,sum=0,count=0;
! x2 {( g8 r( A' J& t clrscr(); //清屏* G4 n6 j0 x# |- n9 q. F: ~- K9 D
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
& b0 Y; H0 F5 f6 @ E1 y3 H: ~* L p->number=1;p->flag=1;
2 L5 [3 J3 s0 T( @8 A& l! [ p->next=head;; p5 F. a1 E; x* F
head=p;) C, T( k' Q/ P
for(i=2;i<=M;i++)
! Z" N" @; d* R { s=(MONKEY *)malloc(sizeof(MONKEY));, G6 G, a: U. _ C. T- r
s->number=i;s->flag=1;
) f1 ^6 a; @7 P, o s->next=head;
/ V: k7 B4 s- Q8 J# A* k; r p->next=s;p=p->next;
; T, @* M$ F% y4 `2 n; S% r }% d% Z7 h/ Q* w& @ }
p=head;
. V8 {: g4 A1 D" Z- R7 e for(;;)
& q- l6 f, R( W {if(p->flag==1)+ l5 u8 C! S: U5 r m
count++;
) ]/ ]5 t- M$ e% ` A9 h if(count==N)
. B$ m; T& B8 I# S* u# `8 O {p->flag=0;8 s2 x2 D7 W/ ]
count=0;9 s: M1 c2 h5 U+ u4 m1 A$ C* [7 |, M2 U
sum++;}
K7 | S7 o- V2 f- W& F' |0 K2 T, | if(sum==M-1) M4 b) k& ]4 H' [8 f
break;
! K6 r% L& Z, `- ? p=p->next;
6 y: G* V8 ^8 r8 ^0 R, b }
+ q, K! g$ ^0 ^5 g p=0 F- u1 ~+ f2 }
head;
2 m7 ]4 s+ B- _4 A7 H8 { for(i=1;i<=M;i++)
: b# }' J* D2 u3 e" e: U4 S$ m7 C { if(p->flag==1), M v/ f: C B' }
printf("\t%d",p->number);: J8 u# S+ ^* q+ C( x
p=p->next;' k' q1 i& A; c* z$ P. d
}
7 `2 _+ N6 ?# L' B& i( u2 F
1 ]8 D8 y- @4 Z- w5 X( g( a1 Y: J4 ~% s- m3 C
M# X& L7 d4 W4 @} ; ^9 _1 i5 y; m4 P+ |8 O1 d
第二种方法:数组) ] t( R/ p) v8 m4 i+ x/ Y
#include<stdio.h>2 Z r# I5 m2 b7 g5 f! K/ y
#define M 8$ r/ k3 i# s% X: d
struct monkey
' k0 G' N. G% m; `$ w. D: P{int number;( E( b9 q5 U' `' T
int nextp;
$ E% z) \# Y( o}link[M+1];
8 n+ d: e. n: [* j; a
7 g7 q8 ?8 H1 T6 v! l' A9 k" }/ q# nvoid main()
, r5 z9 t* i% v; Y{int i,count,h;, R# U/ P7 m2 Y% A
for(i=1;i<=M;i++)0 U! N: D9 h9 e | r7 w* g( D
{ if(i==M)
- `; r; V& X" ^4 v link[i].nextp=1;
1 A. y$ ^7 ^( u6 G3 Z else
0 M o3 l- {2 B; @3 G% x& w0 C link[i].nextp=i+1;
* j0 f9 u$ L7 v link[i].number=i;6 T3 @' A3 {8 J% E
}
2 b' Y5 M$ z' Rprintf("\n");
5 b5 R( A+ e, A$ { O. ]9 Vcount=0;
3 H$ K% z! _8 W2 eh=M;
, n! f% V2 y g# Y- g! Oprintf("依次退出的猴子: \n");
& w, S6 s2 ]& b# }while(count<M-1)
5 ^2 g* A( n1 P{i=0;
$ O/ ]1 `" m3 G+ Iwhile(i!=3)4 T8 W% p1 n: Q2 A+ r
{ h=link[h].nextp;
1 V3 v) F0 G( d- \; D, c if(link[h].number)
5 [. K; k) L _ e6 S7 l i++;}' z# b6 ?, Y( ]* L# H M! w) q! M
/ k+ S) T5 _8 J& }& X
printf("%4d",link[h].number);
+ Q$ P2 [$ V# Y3 D: a6 hlink[h].number=0;9 ?8 l* @3 }4 Z2 h. {2 m4 }
count++;
: b; C* v( R. M}
' ?4 R- f& P" u4 T4 \# A2 p7 Q6 c: i" U! Q4 i# B7 [& d
printf("\n大王是:");
! I5 ^' g& \" h% V3 @ for(i=1;i<=M;i++), E6 V: x8 {4 y7 `6 U' @ Z
if(link[i].number)
6 V* D1 P5 k# s$ S! ` printf("%3d\n",link[i].number);* P- \$ H0 G ]7 K
* I" O+ d4 o5 d5 _' t5 o
|- c8 o" \, E# |- [( c3 p
} $ W2 \2 l) s# a! _2 w
第三种是普通方法for循环
6 j8 a9 q3 b* m0 J#include<stdio.h>
2 D8 L/ |- n' }" }6 T6 p; tvoid main()$ F9 \3 w% @3 E! v' x' M3 G& x$ r% G
{ int i,k,m,n,num[50],q,*p;6 J' V3 b; b# j/ Z% u) J
clrscr();
. x1 N z( ?$ |3 w+ h( V printf("input number of person: n=");5 p. g; X6 T) N% P2 b/ n
scanf("%d",&n);4 K- E% O7 N1 W, L! ]5 j7 N
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只 t, x' P5 C! ?
scanf("%d",&q);; r+ G" K8 g% ?! T+ q. s& Q+ p
p=num;
: x6 ]$ o) s8 I) b$ e2 Y+ I' G: Q3 p for(i=0;i<n;i++)$ Z" \* \2 j- I, x' F
*(p+i)=i+1;' G# z Q- }# K |% I
i=0;
. z$ ~1 d% i- M2 f# C0 M G k=0;8 W% @* S; o/ [$ F% v. K
m=0;
4 J h* p" f. e% _' z: W, M while(m<n-1)* Z+ O, ?1 i! T$ w1 w: T( d
{if(*(p+i)!=0) k++;
( o) o& ?3 @% G1 |8 c' X if(k==q)1 }5 @4 h3 Q! x; x4 U- f F. ]
{ *(p+i)=0;0 h$ K6 q4 {1 Y6 a2 f) v
k=0;# C7 i! }/ X* \
m++;
4 a* U; z, E6 v$ A }
; _) C$ ` x x3 g" E i++;4 C e% [% j0 U" K
if(i==n)i=0;, l" P: u: t. w2 V
}
4 K: V+ v0 n4 v( d while(*p==0)p++;1 P4 p0 `! [% f2 F
printf("The last one is NO:%d\n",*p);3 o1 [1 l0 J. \5 {: e
getch();5 u% m9 `6 F% b8 d% O
7 l* f* b: x3 _8 s+ [} |
|