|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ U& Q4 p8 F$ J6 ^* i: G. d这几天我在忙着编一个问题,我用了一种方法编出来!: P$ }3 X8 e4 {8 F) W
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 a0 ]7 m4 ^& b! j) [! g; W V注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
# l1 W" [( r3 C& U) i5 c0 P3 t# S
1 t# q$ M( L8 q2 Z; z 题目% C5 d, Q$ q8 }8 ]
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
) H$ Z) M4 e2 f第一种方法:利用循环链表
8 `/ v* h3 R1 d2 {7 v. q. \0 s% }#include<stdio.h>1 E5 T: G8 R1 c' d
#include<malloc.h>% Q$ e2 d( x% {
#define M 8 //共有8只猴子
9 O4 v! j5 h7 P Z" ?; f5 Y#define N 3 //数到3只时退出第三只
# B4 v# ]6 E6 ^. T, stypedef struct monkey
* l, C& B9 q2 y5 X6 X* q{int number;. r6 ]$ i: d" \- g
int flag;
& Z2 j6 |+ Z2 c Lstruct monkey* next;# G i' q0 P; M
}MONKEY;
0 @- H7 Z1 T) O$ ]8 amain()
& ~ _6 D7 G2 Q5 J{ MONKEY *head=NULL,*p,*s; s: W1 O# P% Q3 I# X" |
int i,sum=0,count=0;
5 V, C$ e; b. T clrscr(); //清屏1 d# _8 _ q! n# I6 t
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存, X7 n8 m7 O9 _0 l, ]
p->number=1;p->flag=1;9 q+ i* W. U8 W% W5 M* q& p* @
p->next=head;) S( [2 H1 @$ T, e1 f0 C: F
head=p;
! m5 \" s0 w* R' K2 {9 I% p8 K for(i=2;i<=M;i++); b/ ~; x, x4 a% |
{ s=(MONKEY *)malloc(sizeof(MONKEY));
8 p D& D3 T3 X' E$ | s->number=i;s->flag=1;
+ @" K7 ^* A+ o# l/ M s->next=head;3 `# y: ?8 {$ z/ Q1 Z6 M( f
p->next=s;p=p->next;
$ P2 B: }' O9 i, ?1 ?& l }
0 @" ]0 M7 D; W8 w- W' Z p=head;4 v4 i; T0 @/ o9 r2 h
for(;;)
) X' ^- M# ?; c {if(p->flag==1)1 h+ @' z0 U2 y% Z
count++;$ u, C) k2 {) w& [% y
if(count==N)% f9 Z5 C+ X0 I* U9 N( N' s
{p->flag=0;- q9 e$ A* ^3 @0 t+ J( f' V- f @
count=0;
$ i! v2 O3 O y- |9 H: A* y! k sum++;}
6 c7 K7 `, O9 P' V1 U2 F# f/ G if(sum==M-1)
& ]2 @) B Y& h. F break;) V! t& S4 X' B U9 N
p=p->next;
! G' Q7 z# }% r }
) o( r- I0 {7 J% }3 c6 n p=$ I, [& L; K7 c9 Q1 H) T0 b4 i5 [
head;
* G, S$ V, x1 U2 U( C) p) N for(i=1;i<=M;i++)
8 I @; t( ^3 [5 T { if(p->flag==1). R3 `8 u- A V( N' A
printf("\t%d",p->number);6 N& b5 ?8 t9 g( ]- Z8 a! ~- ~% U
p=p->next;
% A2 A. s; t7 \/ v- c- d: N }
2 |( G; _2 M- ^ H* Q2 W; s' f
0 l4 D' E% t8 r! I6 Q
: R) r& n: b! j8 Z$ B& u+ G; X3 F# g4 u1 E3 U
}
3 Z" Z/ Z! l+ `. O% M6 {8 d9 F第二种方法:数组
4 p' C7 ~8 J( Z) @#include<stdio.h>
) Q% B( N0 f. q( L$ G! k4 \#define M 8
4 t' P% W6 o7 @$ K' Ostruct monkey
4 T3 a. F t8 U4 d! s{int number;" \0 {" _5 F1 Q
int nextp;
. T4 t9 d- v( R6 L+ w- l; n}link[M+1];' ^6 ^; b# C6 m w7 k0 y
( y2 |' S4 p0 q. C; a3 U3 `: F
void main(): Y$ @1 N( R8 d2 y
{int i,count,h;
+ ~- q3 `7 `3 O# ~7 `8 z6 H( afor(i=1;i<=M;i++): y4 U" C6 L' s4 N7 g- q
{ if(i==M)
G, N0 l4 X: s: x link[i].nextp=1;
2 M Y& M( K/ M/ X S else2 I8 X/ E& I% B3 i' D7 V
link[i].nextp=i+1;
. l+ @- m/ l5 z% j1 R( A link[i].number=i;9 y& g! w4 a2 d% G# s
}6 r1 ?2 A" e- d M9 p, r
printf("\n");) {" U7 ?+ Q; S' E7 g
count=0;* F, Z& K) ^8 }3 |* W3 j
h=M;
" T5 U: \4 j. d6 Q* z9 Gprintf("依次退出的猴子: \n");
/ ^8 s- B4 w2 ?+ w: F Zwhile(count<M-1)
2 ?5 A7 E0 v( c, |* y{i=0;
4 i0 |) @* V. u" Y2 D" \while(i!=3)8 C. ~9 F# X3 E Y* I7 N) z
{ h=link[h].nextp;: ~! ?- h6 X3 n
if(link[h].number). ?0 s2 w' {& I6 J: _
i++;}
- e g+ o b& x1 t0 Z3 J2 U
0 V3 r6 W5 p& k* s) y' K7 tprintf("%4d",link[h].number);% X1 @1 C" F" d/ c) W: ?
link[h].number=0;
( b4 z1 n- t8 U( q3 A; [7 \* d! `count++;
! O& ]- y; m% p% Y}
: t- V1 w: L; W' c4 U/ X( A
% N# @0 G2 [7 a/ j, Nprintf("\n大王是:");
v3 {# z; g9 w F( b* D for(i=1;i<=M;i++)* ?- v! Y) A3 C. C- a. f9 W3 Q
if(link[i].number)% a( F$ i" |& d! D
printf("%3d\n",link[i].number);
% t$ @ ^% }" }4 {: l1 V. M( S9 u7 d% s) M: |
+ f% L% g: R. i6 y3 m} : V2 i: I$ x3 y% s0 E% f% }' A+ [
第三种是普通方法for循环3 s% t$ J7 v- X- q7 E% v
#include<stdio.h>7 ]' e6 t( u' p% c3 R
void main()4 S4 F/ n# W- z) [0 G# ^, Q
{ int i,k,m,n,num[50],q,*p;2 ?, P+ B$ H4 Q
clrscr();7 K' m0 l3 | e3 J- m6 M
printf("input number of person: n=");
1 G M, [, X) u scanf("%d",&n);5 k% q& R8 Z4 l3 |" c3 c5 e! g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 N& e, H" S! \8 i/ Y+ p P$ G
scanf("%d",&q);% s Y' e8 g9 U* \
p=num;& e( D$ a" @! A9 |/ V8 y2 k4 s+ E
for(i=0;i<n;i++)
4 x2 w' q8 n2 i4 F6 t *(p+i)=i+1;% U# a3 h( s c2 B4 s4 [
i=0;" `6 j6 w' @% B
k=0;
& H/ t8 \2 p$ I3 n1 _ m=0;
4 g U' f! M3 T) g; { while(m<n-1)
! ~. M& f5 D$ J) ] {if(*(p+i)!=0) k++;
9 `9 ?+ p; R' G" q+ x. D if(k==q)
; G) |, l, @6 v& k t8 w# ~3 I { *(p+i)=0;
! e/ `: F+ Y0 k0 L9 u k=0;
1 w( T) m9 S6 ]' C+ b m++;# g) m+ u- i( T
}- m9 V; h% w9 D& g# T, h4 a8 K, n
i++;
( i7 `2 h( x5 L. C9 ?* ]/ K if(i==n)i=0;% v' {, l* C" v0 A$ x' }* m7 k! E
}. o3 c" x- d/ K! [$ E
while(*p==0)p++;
. J- e. B0 s1 p printf("The last one is NO:%d\n",*p);
* _8 }! h7 O7 X0 P4 R% h getch();
; E$ t$ K- `- p( q4 ^3 L
0 s; K- ?/ P* N" c. W* ^! g2 U} |
|