|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!; V. p/ z$ e- y" i! Y
这几天我在忙着编一个问题,我用了一种方法编出来!* x# q/ H5 O, d0 s" S
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!: e, a% Z$ p ]" Y
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 k6 {& A) e9 G& l4 A% L+ \+ }/ O: l: V2 y/ S7 E
' W) w, Y% W7 x+ q 题目' {( z C9 S q$ x! i
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
7 Y$ N b: g% i: H! K" [! D; r第一种方法:利用循环链表
9 D: @1 P u6 f2 c3 k#include<stdio.h>7 y c# r$ C! y" B( Z, r
#include<malloc.h>
1 B( s. W/ ?: P5 D @#define M 8 //共有8只猴子
) b3 p- w: K. `2 r7 {#define N 3 //数到3只时退出第三只5 o2 ]; X; U3 [2 p/ }) c
typedef struct monkey
6 N0 i& E- U ~7 u. V+ J5 K. ~{int number;
& y! l: a4 ?5 w( }4 ?: c' x% Uint flag;2 }0 W" b. w* S+ e4 v8 |
struct monkey* next;: v; b3 O7 L4 k+ X* X6 x. i1 R
}MONKEY;% ?- v9 }8 {8 c' Z6 p1 d
main()
: z$ n$ f/ w) Z/ h9 `{ MONKEY *head=NULL,*p,*s;1 E \8 t( x" {, c
int i,sum=0,count=0;( K" b! D: p$ I, h' U
clrscr(); //清屏5 Q7 q \7 Q3 [/ G1 ]2 f
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
9 a' ]% o/ ?+ e, E8 i' |; m1 C p->number=1;p->flag=1;6 i1 r2 C* b" E, E5 k9 k( O
p->next=head; R! m5 A( B, C7 b& D# v& l" F
head=p;/ ^# a/ I0 S4 {( z# @* w O0 E
for(i=2;i<=M;i++)
1 s, j7 y) w2 U3 B8 B9 }. J. | { s=(MONKEY *)malloc(sizeof(MONKEY));" l z" ]6 I- o9 D; ` m
s->number=i;s->flag=1;2 g6 f9 e$ j; D4 f/ i
s->next=head;. N! D$ I( C" T) e m8 N
p->next=s;p=p->next;- }' P9 ]+ a4 t/ u: x+ |
}4 X; y0 n r2 ^$ C H
p=head;7 {5 J$ f9 P: y) M% z" v
for(;;): o* c0 k: o/ D! y M) J7 l
{if(p->flag==1)' |7 d" a1 Y7 H- X
count++;# F3 {8 A" w4 q3 R+ s% Q
if(count==N)
( K4 ^1 n% {/ U% I4 h, t9 |. | {p->flag=0;
7 q( I1 `6 B" [2 I; e2 o count=0;
' A5 w7 j* j: C/ @% f( f1 k" H sum++;}
! @' J( ^% ]2 N if(sum==M-1)$ k" a5 }) n3 }6 _2 ?
break;
2 s5 {8 F7 @/ ?, r$ w p=p->next;; F) p4 s4 V8 a$ v9 Q
}
: p- H# i* b w y6 U: T p=& T. j2 o9 r, }
head;
4 B. d' O7 T! g7 Y) `% H for(i=1;i<=M;i++)
- I' C) L; H- W0 N' E6 i4 Y* c { if(p->flag==1)9 h" q0 V3 D9 t: I8 @
printf("\t%d",p->number);. l; l2 V9 ~- v
p=p->next;' Q6 t, @+ q7 h+ @+ j: i
}
/ \( ]/ M/ e4 M( X: |" k/ ~1 [ h7 p! x, I$ V) w/ w* G9 s
' @2 I% H' f+ t3 H; T* R q* F/ A1 U7 V: j" f; t
}
* l2 @4 Y" ` U8 z R; W第二种方法:数组8 {! j8 q% s% N0 w: p4 M: Y6 h u
#include<stdio.h>
. h2 |! v9 \ N+ |# k1 h6 N#define M 8
* B; f$ B3 A% _) P+ D5 Sstruct monkey
7 R8 `. a2 g! C o{int number;- [! W/ a# X7 @0 h8 Q. f
int nextp;4 O9 p0 w' |) s- n. q
}link[M+1];7 R" E& Y) k" L& g x+ \" g0 n, W0 |
. n' Q* o! C3 l2 {& ovoid main()
/ e7 H6 X. S& l% r8 y7 |+ U0 ^{int i,count,h;: @. e$ X" L) J5 N# v
for(i=1;i<=M;i++)
, R: Q1 M5 A( {+ V. k( ~; Q% ?% _{ if(i==M)5 g( S8 G7 C9 h; ^5 D, H
link.nextp=1;; s' s7 }) c4 L3 e
else
, {4 g1 |# U, `: n; X/ _& [ link.nextp=i+1;
& @0 _. B; J5 d( o' E/ i% N K link.number=i;
+ {& \! Y7 Y* J! _}8 |7 y K& T: d3 J! i8 x2 R5 _
printf("\n");4 w! J- B& G2 B+ i2 G
count=0;
" E' q( @9 `' S, J4 {8 \# M0 f/ th=M;
2 _) @0 Q, S0 I% K1 S6 x9 }printf("依次退出的猴子: \n");/ E" n: E5 Z, Y' N, x) b& J3 J4 u# C
while(count<M-1)
' h. k w1 `# W0 | Z6 Q; O{i=0;
+ V. T% |7 S1 X! Swhile(i!=3)
; ]+ K1 i" o6 \7 D7 `{ h=link[h].nextp; c7 @- O' Y/ v" g% x
if(link[h].number)
! q8 e0 {* z9 Y5 P i++;}: X" h$ M+ X4 x: A% C- ~; ^
4 S- ?$ _9 {0 E8 aprintf("%4d",link[h].number);
% M5 }+ G5 x6 h- e n+ Olink[h].number=0;- m: z" B- E5 u# E9 r5 T, v" R
count++;, ^3 ?/ |6 Z& T; n$ S0 Z( G
}
) D8 h" C" I- l9 V( F( a2 v% _# a
printf("\n大王是:");, E0 ]1 Y3 J: w! h- ^$ k9 s) l
for(i=1;i<=M;i++)
! K% s; n7 Q+ s* f2 }% U if(link.number)
9 d0 _6 w5 D3 [+ q) M printf("%3d\n",link.number);+ ~$ n& [4 _" Q
`$ ~2 P" Y1 q1 M
2 o+ O) \9 ]2 B2 F& C5 A- \
} * u6 G6 u4 p$ L! b6 t
第三种是普通方法for循环
' T) ?4 y2 @9 j: _, S6 F; v#include<stdio.h>
6 _- D0 z7 Q6 y$ uvoid main()+ t+ H0 Q& X' f* b; n% C
{ int i,k,m,n,num[50],q,*p;
# a- e3 A' u0 W6 t) T. ~ clrscr();* }, o* Z$ F& S9 H+ ]7 ?3 `6 q
printf("input number of person: n=");
# K7 x3 X) q( N8 `' a. c' s scanf("%d",&n);
/ J; O4 E( Q. Bprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 t2 h% |0 b7 c" Q scanf("%d",&q);! P: Y( o( W7 \# V
p=num;
4 n: x% C+ c: ^, q( ~" p9 [ for(i=0;i<n;i++)
5 ^2 ^) \8 i+ A5 ?9 N8 F( c% v1 y( X' @ *(p+i)=i+1;
' x, b) J8 L2 }( x: f i=0;
: O9 O7 H" E# O; k7 r& M3 d k=0;" a' @( V+ j, q5 e; [; K8 g0 [
m=0;. j' H3 @; q. S% \* _
while(m<n-1)& Y" }/ [$ W/ w: T8 t: K5 \
{if(*(p+i)!=0) k++;
( X# d x) [0 L) R$ D! H( t if(k==q)/ r6 t. F, D' i& Z* g
{ *(p+i)=0;8 i, y" ?& f3 m2 q# W0 f
k=0;- ]* r% H- ?0 Z B7 f) L
m++; K- S Z. ]- ]
}# V9 W/ N7 g9 f5 Q8 k
i++;
% U/ n+ Q) D+ D4 ^" R0 }) r! e if(i==n)i=0;% o3 x6 ?% f, L5 l2 l' B) N* D
}' f1 D ^1 h: m$ X
while(*p==0)p++;( x3 y) \; ?. ^4 z( r$ h
printf("The last one is NO:%d\n",*p);$ m' ^( z& N' y1 w( |
getch();- P$ N" b# @/ k' I: r: v! v
1 q [5 ]) ~; T: @' X, a} |
|