|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
0 [ a8 m9 Q! R1 U这几天我在忙着编一个问题,我用了一种方法编出来!: r: P J" G+ C# S
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
9 T/ L2 T$ [5 ^7 b2 H注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
; g2 j2 [7 e. f G d# o
: P1 p% R: a5 A9 [6 v4 |
9 G' i' N! I: X1 |+ ^5 ?5 T 题目% q& m5 h1 m3 s2 x) K! p
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
, P1 g7 E- ~, A- M第一种方法:利用循环链表
" y% q/ W* w; c' i! ]$ Q% _#include<stdio.h>
2 u* a* \6 d. ?: g2 a) l+ F6 E#include<malloc.h>
^% H d6 t$ A* D2 `7 H#define M 8 //共有8只猴子; \4 a. A& ]5 [6 k
#define N 3 //数到3只时退出第三只
" H* z y" ^- z/ B q v* utypedef struct monkey
; w& K" q4 I" B( D! I6 i{int number;: d Q; a+ g: y* k6 q
int flag;
/ }" y [5 A% y5 R! u# y3 D& Astruct monkey* next;
5 Y+ x0 f( {/ n4 f, R x) K( I}MONKEY;0 R2 B7 G1 J6 u, k
main()$ H$ w1 o& G/ H* @% R, @) b
{ MONKEY *head=NULL,*p,*s;
* ?! ?' n7 \' @% o. w int i,sum=0,count=0;2 w: l) y9 i( F- D1 s/ @
clrscr(); //清屏
2 O+ e' f c) q' Y1 {- E1 Z- M& S p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
~1 h0 ?. J/ o5 N p->number=1;p->flag=1;; x4 [6 A1 n" g# W3 n, N" }' v
p->next=head;3 Q( o1 f' j0 z8 _9 J
head=p;
0 e1 B: T, u; u" _0 q* E for(i=2;i<=M;i++)
5 t3 m B+ _) [ { s=(MONKEY *)malloc(sizeof(MONKEY));
; Q- K/ k' F6 j s->number=i;s->flag=1;
) C8 o1 _* d. M: m s->next=head;& {5 g0 L+ }4 ^" h& B
p->next=s;p=p->next;
# d' ]4 ~. i0 U/ T6 n }
" x2 U# v6 Z b) ^; ?5 b p=head;4 G- R5 [% c! L# G+ n! V
for(;;)3 p7 v, A8 a' L1 _7 Y( ]
{if(p->flag==1)
6 U; ]6 ]' a- n, _% v& | count++;
& i! R) T5 D7 A0 ]" a if(count==N)& N, e6 G% ^/ z3 D" m; v7 i* G6 j
{p->flag=0;' { B$ I7 l' N* W, H. m$ o
count=0;5 ]& H( E* x e Y, G
sum++;}
3 b% \$ z4 Q3 Q7 R+ H6 a k T* G if(sum==M-1)# ~* I, _4 \# {' ^* k* j) B
break;
! n/ s% Y% {+ {7 B5 K, q; j$ F p=p->next;9 ], c$ W" ?* `, N0 q* B
}, W0 m% y7 p5 D3 i
p=* y7 c& a. p8 S: K+ l
head;
' c" V+ Q+ d& U4 ]$ Z) ]/ w1 R for(i=1;i<=M;i++)' L8 j' p: Q/ }- B! P7 B
{ if(p->flag==1)* x5 d4 Y! S; ?6 Y6 Z
printf("\t%d",p->number);# Z) G( Y9 L* s. ^4 E$ n7 Y. l& I
p=p->next;
- N% l0 G9 C/ p0 }$ K/ O0 i }
3 _4 a6 z- {7 K$ c5 L6 B9 {. e
* s- F7 [" s; b5 `& {" }: P6 H Z2 D
4 F0 G; R% T3 Z! D
} 0 E, j- }1 ?1 l5 G
第二种方法:数组, D7 a0 |! n# C% Y( g- _
#include<stdio.h>) r3 U$ f3 s5 g# Q( L3 G
#define M 8
/ W' _. e, k& S' Lstruct monkey5 l2 p5 J+ L6 W/ R2 o$ m
{int number;
9 M; b3 k9 Z* L- T* r# Y8 N6 kint nextp;6 F3 i7 ?! w& U2 b$ _9 g
}link[M+1];
# ` @( G% `) f
( ~" _, z1 k" Tvoid main()
0 m% K- |$ ?- B" }. U" g{int i,count,h;
; Y- c7 P3 { b5 O3 _5 Lfor(i=1;i<=M;i++)6 q! H! T, q" q- B. k. s
{ if(i==M)( M, E+ ^2 b: S9 T5 B# x
link.nextp=1;5 y8 [# i( ?+ C3 A Y: B
else& \" C2 N" j+ c8 j
link.nextp=i+1;5 Y' l6 p! ^' }5 z, q
link.number=i;& q- x" r/ a9 k5 a4 L
}
2 h. D/ r3 w) T1 Kprintf("\n");
, F8 {$ H5 C/ t3 Y& ^6 c: |count=0;
: J1 [, H0 x( e) l7 S/ k$ k& Oh=M;. ]: Z& J4 s9 d: d
printf("依次退出的猴子: \n");. P4 T9 D3 o* B8 [& w5 c7 F7 D9 B
while(count<M-1)$ u- {+ }( l5 C+ W
{i=0;4 @# [4 \2 m# ?3 P1 q8 i0 a
while(i!=3)
% F0 G& ~8 i' X2 O: N" H{ h=link[h].nextp;) J- \4 O$ w8 |- W0 d: ~
if(link[h].number)3 D6 m: H9 S% A
i++;}' ?! Z) D! P$ w3 R9 z8 `
) D7 K' N+ G: C' u
printf("%4d",link[h].number);
( _* w. ?/ `& Xlink[h].number=0;
- _9 l2 }3 P/ l9 fcount++;+ N7 v/ p% a# X
}
2 d! z5 {& e% |4 _7 N% h \/ A7 V: o3 B6 ^ i. V4 \
printf("\n大王是:");2 B# H1 O7 M1 w: `' b5 J
for(i=1;i<=M;i++)
$ \) V/ u- b+ P, W) m if(link.number); I! E' m- T$ i
printf("%3d\n",link.number);
% _! A! {6 W7 Z* j8 K. ~
( B' N' n. ]( k) G% v# v1 u! J4 k3 f* B. n0 i) ~
}
/ X( y/ R6 ] u8 ^5 a第三种是普通方法for循环
% @) z# y7 J$ g8 t% x#include<stdio.h>
6 ]' i. ]6 R, Z6 p7 j6 P' Pvoid main()
! O) b. j8 f% h8 q1 B{ int i,k,m,n,num[50],q,*p;5 h9 {( M0 o9 M
clrscr();
/ J) F7 a- i Z8 K9 S7 g printf("input number of person: n=");. v! M7 ^( o0 @
scanf("%d",&n);0 s q* u! G, W7 \( j( A
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只( M4 R! N5 H; o4 g6 y t/ y3 }7 I
scanf("%d",&q);5 y: [# [$ J2 t$ W$ c
p=num;
* @: @. M0 V$ n! F$ b) T for(i=0;i<n;i++), J& d+ z3 A: O, \+ p
*(p+i)=i+1;
6 c0 u5 a4 X0 F. y1 j/ v. o i=0;
: A, E2 v' ~' N$ i$ F4 Q k=0;
0 f7 h4 w" p& ~1 W/ e! O& Y6 H m=0;% l, m; Q' X- R, I; m% u
while(m<n-1)! C J/ b6 a& V2 F& ]
{if(*(p+i)!=0) k++;
$ b, C7 s) `4 Z0 P4 c+ K5 |" x5 M if(k==q)' f' U: L& A9 }) }" f! c3 a b* {
{ *(p+i)=0;
' v3 H! ~8 K; ~6 q9 F9 m. K( a k=0;
4 E; D0 w; i4 T# b7 E: t m++;2 X+ L: T( Y) ]' x# e5 f* q, v
}- a" [2 v$ z- r- ^, P& c7 @
i++;
* h$ s. p1 \ U if(i==n)i=0;
0 z# W5 K" F* d7 q- b% X9 C }
J& } |& D8 q5 M while(*p==0)p++;. s5 Q; ? X2 d5 x n+ c
printf("The last one is NO:%d\n",*p);
L1 F" _% G% b getch();
a2 W* K0 b3 q+ }) w( b5 I; [- q7 Y L% Y2 K1 q9 Q
} |
|