|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!" H% E! u9 A4 p+ n* h
这几天我在忙着编一个问题,我用了一种方法编出来!
' \, [1 T& `# U3 y: \& T但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!& D3 g+ Q! _+ a& `3 ~( K! P$ r
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 0 l. f! Y9 `# q/ @. E
* L: S' |/ {6 @' i* P
. M% U0 j, `( Z/ ~! `8 r 题目
x2 c; C& p9 P! M1 c* x; S山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。$ A+ r4 ?8 C3 {( A
第一种方法:利用循环链表0 G7 |1 `0 u" I# V( t2 i
#include<stdio.h>
v: Q! X! c# \8 W#include<malloc.h>2 o" S% c6 r% j0 y+ n
#define M 8 //共有8只猴子
% c$ Q: Y* v B% t( p9 S#define N 3 //数到3只时退出第三只
' j6 ^& o/ t6 u3 Mtypedef struct monkey
8 w+ U0 f, I. v2 A/ C4 t{int number;7 E9 a$ o; i: |
int flag;5 i: f" ~1 [! d* H+ @
struct monkey* next;
/ ^. o0 X. y$ z}MONKEY;9 [1 E' _8 A8 b' C
main()0 z2 ?0 ]& H" n9 D, ]% _8 ]
{ MONKEY *head=NULL,*p,*s;
$ z/ {* W/ L* B+ f% q( h# { int i,sum=0,count=0; ], g4 V- x. V4 [2 {$ m0 q
clrscr(); //清屏) f! C9 @5 F# j/ o$ I2 F/ V5 C, E
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存7 `# n8 Y3 g; i! X+ M) ]; C% q
p->number=1;p->flag=1;
% M: i+ Q! c. n( e p->next=head;
( R! ]$ f9 a6 K. U head=p;
; L: b6 x$ o. D9 E6 { for(i=2;i<=M;i++)
# Z1 H, Y5 |$ A { s=(MONKEY *)malloc(sizeof(MONKEY));" O9 e, K, Z$ J) j7 m0 z4 w
s->number=i;s->flag=1;
( C9 X) R+ m* {% @* Z s->next=head;
: k( N$ G6 O+ z% Q p->next=s;p=p->next;
% |* M% O- S9 e3 M6 H# h6 ?- u4 r }) M' a; V8 }$ b4 K& z7 i
p=head;
5 p ^' u" G9 g1 n for(;;)9 X) Y- x& F& u3 s' W1 _
{if(p->flag==1)
" @; W; k# ?' C e9 O count++;
/ u' R8 N5 \. F5 O, T if(count==N)4 N8 A3 q% j0 P* P5 k& Z3 \
{p->flag=0;3 X% i1 w: s" E
count=0;+ P; u& g% q8 @! T' ~
sum++;}2 o, K x/ s* @5 I
if(sum==M-1)
9 K7 [9 J; p% e" b% X& u break; D& t* k3 t- N$ B2 O) Q: ~% \1 P
p=p->next;7 {- d) t) W8 \# N1 @' V1 x/ E1 i
}7 A9 [3 H. H1 B/ X6 E
p=/ y: D3 m$ c+ h% m6 y6 ~
head;
& a6 C7 F, K3 L for(i=1;i<=M;i++), y _& k8 n% C( Z+ D6 \( B
{ if(p->flag==1)0 @8 z' ]) c H3 c+ t1 l
printf("\t%d",p->number);5 m2 u0 q! z |
p=p->next; [, k L4 _) @9 b4 E
}" s' k' |1 G n# m& k; \0 ?
& ^5 ?4 [& U& x# H
& L! F2 j0 j+ X L
& q' U4 j6 W8 Q' E} ( J _% e/ ^# f0 n9 d
第二种方法:数组
% l. H- Y- K4 B#include<stdio.h>& ~9 k# n$ w _9 b8 i0 y' f
#define M 8. K( e/ |, B8 Z# W/ i
struct monkey5 a1 Q: W" ^& U+ n9 E; q5 F
{int number; H# w* i5 C8 q6 l
int nextp;
# r% t2 y( |7 s, _& }' A2 a: C}link[M+1];
8 L& o7 [ ` b4 U, G+ }" W2 h1 v
void main()% h% v. q8 o0 z+ H
{int i,count,h;
, K( E! O7 r# `$ ?" j wfor(i=1;i<=M;i++): D) H. G0 [3 X* n9 R% X0 o
{ if(i==M)0 a& N7 w8 F$ {& R0 K
link[i].nextp=1;& W% ~5 @* P; |2 S) V# J j+ T
else
' {! |5 L6 s. e* o+ s( p0 n link[i].nextp=i+1;
2 s' y7 [" o, I* j" v# T3 Q3 G* v link[i].number=i;6 }2 }# t; v3 ]4 g
}0 L! A+ M7 n: d3 O) `' ?
printf("\n");
+ \: R$ T/ W& z: A7 W+ X* qcount=0;
+ ?- Z$ @" [4 ]" u- R4 F2 ]3 hh=M;
' E7 F9 e( h* Z8 q: O! ~printf("依次退出的猴子: \n");2 Z. b1 n, {1 [8 G' Q9 S7 q
while(count<M-1)! n2 m7 \: q: i: ^
{i=0;4 n$ ]; {5 Y* \4 O* Z K/ r
while(i!=3): H6 x8 T# q' Q }( f0 |1 q5 C' G
{ h=link[h].nextp;
/ `% j; {2 a. {4 y# F if(link[h].number)3 G* c! O5 D* K: }
i++;}% o2 T" d) r) Z0 ?+ l
; c: x6 s0 |, z, o# ?) a
printf("%4d",link[h].number);
4 n, M; i) o+ b" M+ Q/ g! _; Glink[h].number=0;
' V0 ~' A# c3 ^! I) I; B' wcount++;# Z- W) _2 [2 J
}
1 O8 A3 w) m0 {7 M
+ s2 \4 {3 Y3 z6 s/ xprintf("\n大王是:");
, M' z/ g/ W* a for(i=1;i<=M;i++)# w5 A6 T2 K' p, U3 j9 B
if(link[i].number)1 b, p' Y' o! Y1 }8 G1 S- ^* x5 ^
printf("%3d\n",link[i].number);
1 g7 D7 ]) b$ U; s* `
; |! [& p( N" Z+ y. g# T! m% ^1 D; j$ {) A
} " h2 a5 k- z/ U0 ?, ]$ v7 L* v
第三种是普通方法for循环0 k, }, e- O6 Y4 P6 ^5 b3 ^3 J, K) S
#include<stdio.h>% o, F4 s3 M, w/ N
void main()3 c, h! t1 _; S6 l8 U
{ int i,k,m,n,num[50],q,*p;
2 G. W% u4 r0 Z7 Z, k clrscr();8 x6 C0 e# ]3 M- i% V
printf("input number of person: n=");
! J1 c* L+ I6 i% v scanf("%d",&n);7 V- T6 k, J* J! _7 b0 s3 ^! B5 U9 m
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
5 y U; B- N0 L scanf("%d",&q);- X) \# L# R7 t0 p, Z2 N
p=num;' c9 F4 {, \+ ]/ e
for(i=0;i<n;i++)2 g8 l7 G. }: }% g( W6 W; t
*(p+i)=i+1;8 R7 j$ d7 h: T3 @
i=0;
( o% {0 q& z9 F, K k=0;6 c0 a R; u" z, _ L
m=0;; _& v" F# C% B" m* W( a
while(m<n-1)
1 M9 A& ^ ^: }" h {if(*(p+i)!=0) k++;! s( L$ @6 A M& Q: e
if(k==q)
& m) N) `, {# X1 q: X { *(p+i)=0;
- j9 U9 }) ]5 g+ N k=0;) e3 S L5 k/ h. s+ L
m++;6 s, o, \; ?# S7 }
}( g2 u+ a0 p& D; z* W
i++;) n% z, u/ G5 _+ X
if(i==n)i=0;2 V/ _+ d% f9 f5 S6 a
}
, D+ f* R/ d" P! c' y1 Q while(*p==0)p++;
) N% M: Y% q4 T) }6 s printf("The last one is NO:%d\n",*p);9 k% v- B2 R5 W0 H9 h+ L+ o0 v
getch();
3 z# @: ^- g4 c: C% b. K
6 K0 L* E( B% f7 U} |
|