|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
5 |& z( x$ M9 e7 H这几天我在忙着编一个问题,我用了一种方法编出来!* J0 X) o4 U; E3 X6 q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!6 T% l1 F8 X$ ?6 V8 o
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( [/ O; H; c4 x9 c
- j5 d Y& d: _: |) Y7 H
+ |0 u: P) x# ~ 题目 f0 I3 t# Y/ ?- L& r
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
6 `- e1 t7 C8 o& V1 u4 q. F1 x第一种方法:利用循环链表% B9 R3 n$ t6 e) O: t3 U* L
#include<stdio.h>% M1 S( l9 s) i; r3 c M- s$ l' Y
#include<malloc.h>$ N, ?- c" _3 F3 d5 ]3 ~
#define M 8 //共有8只猴子
: P- ~1 Q1 g9 m8 ~#define N 3 //数到3只时退出第三只$ j2 f2 P+ G. `
typedef struct monkey
/ Z3 V/ B; B5 O{int number;, J$ o% f" S2 J5 a
int flag;
5 |! q; B/ l( s+ ~6 Gstruct monkey* next;7 d/ _5 j" |6 d# |
}MONKEY;4 N- ]* s: V t$ I" k9 b; r
main()
' @1 f: f; y% Z! g$ j5 V{ MONKEY *head=NULL,*p,*s;: x. u( E& t9 ]' C9 D, V
int i,sum=0,count=0;' n4 b- `5 f" V( A+ z9 u/ O
clrscr(); //清屏
- R/ Q& h+ i: r/ A2 r/ z2 K9 E p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存6 h, w; o3 o' J# I* J. E
p->number=1;p->flag=1;1 K, r! U7 w B3 h7 R9 y
p->next=head;' F5 @0 ?: U+ c( ^8 H& l
head=p;
8 u; _2 K |$ {3 }' e! L for(i=2;i<=M;i++)
# o1 H5 p9 @( Q+ d$ ~ { s=(MONKEY *)malloc(sizeof(MONKEY));
2 ~& \6 z: \. U8 F4 h+ b s->number=i;s->flag=1;5 S' Z: d( D" @/ e1 Z
s->next=head;
! U8 b! j$ R% B$ i( w( {- p p->next=s;p=p->next;8 Y$ F, ^8 p! v, H* s0 S0 s
}
. w4 z& ?" L) Z& T! Z- P* ?" \9 Y; Q p=head;4 S+ @- V6 k( B& u
for(;;)6 C* V: m( D; C$ y' [3 Y( V
{if(p->flag==1). ~5 U" e4 W) q6 S- T) U# q; e
count++;
& b# q' t9 L" {' x Z' f3 r if(count==N)! F& s( [* _# h: ~+ v+ m
{p->flag=0;
3 P: p- R) ]) y; S+ ^* Q' Z count=0;
0 h% h7 h) d9 A* n5 S) O8 p& X sum++;}
& K. H2 u! \/ p3 P$ V$ F1 S9 w7 J% t if(sum==M-1)) y0 ^* n( D$ [, r
break;/ J$ B- j* S3 u# c( F
p=p->next;. ~8 x3 v/ d/ \1 L0 O
}1 c5 }# E% v1 j7 \
p=
9 X& G/ v4 d$ s! E$ I head;
# e# o* [# \: U( ?4 B* w for(i=1;i<=M;i++)( [$ W1 K& u& n
{ if(p->flag==1)
+ V+ ^0 v+ x+ M8 ?& F printf("\t%d",p->number);
0 ^6 P& F' s9 E* N p=p->next;
# P$ J4 O: K- f+ L6 c }! P) Q& B& A0 h$ }0 \$ T, }* i/ I
1 W1 V; o4 x4 H) M, K' c& n% d8 R" y3 z& a z' B
# i2 c9 M: C) i, v9 U0 w: M
}
( V5 L5 F1 E2 A$ u: P" E& y X第二种方法:数组) y6 h+ N4 }2 |2 E8 |
#include<stdio.h>8 V# r N! J& y6 B5 `. ^
#define M 8( P7 U. ]- R' J4 ~: T6 h$ B" T
struct monkey# M; t; C2 W6 A0 b; _
{int number;
/ s1 W6 C% d- |int nextp;! y8 \6 J0 g# v
}link[M+1];6 c1 n( _. l( E- d
' G a1 r$ n8 wvoid main()
E2 s6 @* }/ e* j{int i,count,h;
* f" t9 c9 v9 y. L" ^# c+ Sfor(i=1;i<=M;i++)( d/ |' {2 S, L. z
{ if(i==M)% q: p! T) B( Q$ e. m9 O8 b
link[i].nextp=1;
q2 P. o# m9 Z; m! Y4 N5 S2 a else) }/ J$ J2 o( K$ `/ D* v
link[i].nextp=i+1;/ Y, \; g7 z6 }7 s
link[i].number=i;
9 o; l# J# y7 t3 v- A; M1 C% t}
$ k3 e* p& d* b! p) y/ hprintf("\n");
4 ~7 Z- Z6 w7 q& |' Acount=0;1 L: w/ J) u- d3 J) ^" m1 |
h=M;
5 H0 g H I' F. lprintf("依次退出的猴子: \n");
7 N' [0 z) w1 G, D( p% q ]while(count<M-1)
" W4 l/ }4 x' c: U+ L$ @{i=0;, N+ y% k- V4 r) U" Z8 \! e- L
while(i!=3)
* w, B/ w- {: j! ^, ~$ Q{ h=link[h].nextp;
8 p4 c" V5 F9 l$ l5 ]) R if(link[h].number)/ g4 a1 ]2 q1 H$ `3 w- k
i++;}, |! r" w3 E# }6 d2 H2 J1 q
% U0 r" U* Q% d8 k. S4 Rprintf("%4d",link[h].number);1 ^6 g3 f B+ Z X
link[h].number=0;' S6 q, ~5 m- \" X" o7 y9 c
count++;
) s1 \) ]* L1 o1 E9 P5 _}$ _7 w- O/ \4 B& U4 w* g1 b/ y
# n6 }% h1 {& J1 j& V+ A) Yprintf("\n大王是:");
) \) L" p: f# P for(i=1;i<=M;i++)! O3 Y- \2 P: G( j+ o, a& H& f- a w
if(link[i].number)9 z# y( A6 r4 `* D1 ?; r
printf("%3d\n",link[i].number);
6 c1 l3 |/ M; W# M
* w5 `# R( J9 Y+ C, Q+ H3 S( v b' p4 g4 e3 T! g
}
$ L' q7 X0 v+ {4 ?' }1 R8 y第三种是普通方法for循环 X* ^8 Y# c$ r2 c, Q! B
#include<stdio.h>
+ }0 V9 d7 W% E, F+ lvoid main()
& h3 F7 C; m2 K( G3 G% Q{ int i,k,m,n,num[50],q,*p;( Q! b; p" N0 N* W# x
clrscr();
! t- e2 `6 D1 J+ u+ C printf("input number of person: n=");
+ U# }4 z: z' b0 n! d; L scanf("%d",&n);
& N6 s, [# |: K* B# Q, W6 Cprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只7 U( x& _7 K. a$ w
scanf("%d",&q);
1 P: {3 z/ I8 r# S3 l8 P p=num;- H9 x& @7 H# A+ Z, O1 m3 w
for(i=0;i<n;i++)
# y7 ^+ [" Z4 w6 J *(p+i)=i+1;& b J8 u) j* h" _% u7 A+ }( p
i=0;( L' W+ K! F- p5 U/ i$ p
k=0;" l" {) A k5 m3 E7 j
m=0;1 o0 v7 f+ n6 Q3 _1 P( Y( I
while(m<n-1)( [6 u& v7 B2 S+ h
{if(*(p+i)!=0) k++;( B4 n' E" x9 u3 r4 b9 S
if(k==q)
9 U0 |1 K; J+ V5 n# k: v { *(p+i)=0;
, N' ^ l- o/ P k=0;) u4 @2 R* P9 j* z. h
m++;
% M( [5 |: `. |; [" | }- \0 [; M5 q+ D
i++;7 C3 U, w6 i) A7 |! `) ]0 W) ?
if(i==n)i=0;
' l Q5 d2 t/ d0 u0 k5 l }& T- x" U( n- ?' Q9 d
while(*p==0)p++;5 S) ?: j4 m5 l- i! W
printf("The last one is NO:%d\n",*p);$ L ?+ o( I5 ]
getch();% ]6 O) w m% H' g- ]& F$ r
3 v6 ]7 p& b V* r
} |
|