|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
5 L. S) f4 B- R4 ?这几天我在忙着编一个问题,我用了一种方法编出来!
+ d: O3 `/ _) u9 m/ M. q+ M但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!: @- {/ r9 J1 b
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ' U, T2 P4 h7 u
+ S+ b2 l! R" w0 q3 q, b% I
0 Z2 N# B9 T2 O$ l 题目6 C) x: J7 m' [0 N) ~* z+ p
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' J% Z8 y3 |$ N( g6 Q' j& A
第一种方法:利用循环链表
$ a& } S# E# d+ d/ \8 a+ R$ M8 y#include<stdio.h>
9 |4 z6 a% S9 m* k- ?. ^- M1 ~#include<malloc.h>
! _1 V( H3 D5 z; B) e: Y" W- g#define M 8 //共有8只猴子
: v0 s5 l) b/ J9 X8 `" e' H#define N 3 //数到3只时退出第三只0 M1 K. j+ j! m2 J4 U
typedef struct monkey
! U7 i! @' F) g, V8 f9 D1 n8 B{int number;
7 g# m( j+ U- Oint flag;
* P9 [$ m W4 S3 P) |: Istruct monkey* next;1 M2 A) W$ H' y4 x. h
}MONKEY;. u( z8 }0 c6 H, }+ u: ~
main()3 r; a7 o3 i1 V& u$ w4 k \
{ MONKEY *head=NULL,*p,*s;% c9 U9 w/ f+ u& y7 [7 _5 F% ?
int i,sum=0,count=0;5 w% _+ Y+ [ h( C* A" z
clrscr(); //清屏
/ ~0 \" O: W/ X1 x p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存7 v p8 N8 k, E0 E2 c
p->number=1;p->flag=1;, y* c% {" ^& D3 w% L
p->next=head;. K( s6 U* j, u& L# i6 X
head=p;
7 o8 b4 Z* f& o) Q, \ for(i=2;i<=M;i++), _& E2 }2 B! U2 r
{ s=(MONKEY *)malloc(sizeof(MONKEY));% a! _" Z3 g" y _7 c
s->number=i;s->flag=1;2 a8 E S+ e% I7 O3 S
s->next=head;
9 U7 w1 T! P3 c; u% a p->next=s;p=p->next;
+ x/ F! J2 }' D }
' {$ {( I @9 o* |. O0 k" A p=head;
( a! h& Y$ w$ m% w! C for(;;)5 q! m& [3 _& }6 n1 t
{if(p->flag==1)' q: e* g" }* ~" J# W3 }; |
count++;
! i {% D8 B4 ]4 N if(count==N)
8 B, p ` `+ D {p->flag=0;# M* b- I. _8 v+ v% I& I2 F! E2 B0 [
count=0;+ s# {; e' Y$ c. y9 W
sum++;}
) Q# l# k+ U( T. S! i3 {" Z! v if(sum==M-1)% k B: J/ q! _2 @3 k1 {8 S
break;
1 e% N2 Z: V9 S3 n' G5 P p=p->next;1 v; Z- i, a; a+ }2 i7 y9 b" b% j
}/ [1 l' u/ B" @' X
p=
* g( F. ~! l0 h5 n7 z head;8 t1 V# E$ o) ~7 ~( ^
for(i=1;i<=M;i++)% a: I3 h- p2 P+ Z/ v( x/ t
{ if(p->flag==1)) i. {, v$ V8 n0 m
printf("\t%d",p->number);
% Z: G+ ~ \1 K; ?) g p=p->next;5 g: t1 _/ b# @
}, X; y4 x V. d4 \/ ~
0 ], x1 o! k0 o! z0 a k8 k' X7 X9 @* ^% L
; K: w8 N) M# c7 z" B}
4 v7 E3 Q: f6 T v第二种方法:数组
; x+ F: Z- t2 z5 _7 a#include<stdio.h>
; H {6 ?, L! p/ v6 C) h' ?* \#define M 83 Q. Q# q+ b. I; O1 m/ x! @' k
struct monkey
! J3 k' ~1 p7 q% x0 V1 E2 b( M9 y{int number;/ l6 k2 p! v2 h/ {
int nextp;8 ?" q% N4 ]- O; ~) f. H( P
}link[M+1];
, g' g- O2 @9 M3 _9 Z3 a# @; j7 v' v1 O# _* O. D% b6 z0 {. i
void main()
5 r) m, M' F7 \9 O{int i,count,h;9 ~) [/ f+ X$ n: b; u
for(i=1;i<=M;i++)$ n% Y2 D: [$ w9 v6 M# t* {
{ if(i==M)
% m/ `8 n4 D/ {+ Y1 { link[i].nextp=1;
) K5 T: z; {% l. x- T5 A# w else
: [/ I# ^# F S6 u link[i].nextp=i+1;; a' Z- Z2 K! r/ n$ Y$ t. }$ ~
link[i].number=i;
' S/ z- W, T* r7 J& p}
; z6 J% j' \) m* J, V( V! ~printf("\n");5 |2 J+ ~4 H/ T0 S: P. m3 y% h
count=0;
8 ~& u" P2 E! M" r7 k: x+ [+ T5 _h=M;
' r- j" A+ s+ u4 n' Pprintf("依次退出的猴子: \n");+ y6 x3 Q }3 q- f: b
while(count<M-1)
$ ~; u# N) q* I4 w{i=0;
2 }6 L0 D: U/ x# V& rwhile(i!=3)/ x* D( P4 ~3 z3 i! I1 \# r8 i
{ h=link[h].nextp;
4 l# L) p9 w* ^4 o+ i1 E8 h' b if(link[h].number)
& T* n$ s X: r4 `4 x i++;}
! m H$ ^) v4 [+ h F
6 p8 B1 j( n" g3 z) B @ m9 Y( Zprintf("%4d",link[h].number);
+ \ Q) F; k8 ^# |6 ]7 |link[h].number=0;, M/ U) V+ I" t: w
count++;0 p3 W/ I% x3 r! Z5 S$ u5 i* Z% W
}) X- }' q$ x9 O
5 Q4 u2 g8 G8 O: I9 G; j
printf("\n大王是:");
: U E" V8 O7 }0 n for(i=1;i<=M;i++)
9 R0 ]6 n3 R' n# n4 n' D# V, g if(link[i].number)
2 ~! w& i' F2 b, _9 A( a3 X printf("%3d\n",link[i].number);
" F; J+ k& g2 J |! [
I) Y) Z% K0 A# c4 c0 f) ?
' o. A/ m& v* w}
! s/ M5 E/ V: E' G第三种是普通方法for循环
7 W9 k$ ]# u9 S9 h" J9 J5 y6 i* b#include<stdio.h>
2 Q' T6 c4 f& Z3 Avoid main()! x# f1 m$ B; F
{ int i,k,m,n,num[50],q,*p;9 ~$ m3 M0 M2 p$ `
clrscr();
* o9 `/ r d/ {0 l7 Z, G printf("input number of person: n=");2 L1 N. P1 s! ^0 n' h `4 ^9 t8 D
scanf("%d",&n);0 r6 H, I- C% @0 U
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只: ]; B* p- G2 Y# S2 } V) T7 O
scanf("%d",&q);1 T& [6 t1 G0 l' m$ U' m9 C
p=num;
- z( l9 i0 ^3 L& i: X- r, d- ~ for(i=0;i<n;i++); Z5 g9 X2 K( `3 H7 o& b
*(p+i)=i+1;
" T2 O4 [- f7 g# ?1 S; h9 q i=0;+ Y, H% {) T3 J0 w/ C) c0 N
k=0;- J5 m/ f+ _8 u8 j- Z( ?
m=0;
{0 Z+ y1 g0 Q! `6 x9 [" o1 l while(m<n-1)" e6 R5 M+ R. E0 K2 h0 B( q
{if(*(p+i)!=0) k++;" `/ M! r, J8 \: r/ j( f7 y7 E
if(k==q)
* u) M' R9 i+ q: g1 R { *(p+i)=0;
1 x1 [4 l* B2 {5 y, B k=0;
& p; ?+ Z. k: t m++;
) Q% e6 C, a. B% c8 O, e }
/ \- \4 I E9 y, G5 k* O0 r i++;
7 y' l/ p. ~/ b! H& o if(i==n)i=0;/ j. @" w3 m$ m
}
4 f0 ~2 }$ a7 H% j. k& Q2 ~1 d while(*p==0)p++;' N6 |/ v! r; n; X8 g. v
printf("The last one is NO:%d\n",*p);! E6 {. ?* F9 b& D4 g6 p. l7 e" j
getch();
7 m- `% x6 l0 z' P: l
3 @; |& ^/ |" I7 M+ U0 L, }0 I} |
|