|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!3 a u+ f6 g) y: r- \+ Q& n
这几天我在忙着编一个问题,我用了一种方法编出来!
Z5 r0 |5 f9 v; D+ S+ B但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
3 k7 O; [; n/ D4 z注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
, K+ h4 _- W- U' Z, U. |
5 \& }, r$ R. j+ ?. p3 U, k3 s( E1 m
1 X1 `2 h$ W$ L' E 题目
* y2 c# |8 ?7 Z( P山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ R4 t0 Z: | t; o第一种方法:利用循环链表2 D" `' J; U+ [5 a3 W3 u5 A
#include<stdio.h>
9 I" R! K3 V3 T6 R; m6 k* w# T5 P#include<malloc.h>
" v0 M! C0 C3 I) f V#define M 8 //共有8只猴子
, |. P! ]+ G* C# N1 t6 Y#define N 3 //数到3只时退出第三只5 }; n# n& @: ?3 l/ T- s; U
typedef struct monkey/ S' f" o% |; e2 J! x2 z' l
{int number;
8 T) W, f( Y. N$ _; N4 ?int flag;
: v# d0 T t: M2 h; M1 b2 Wstruct monkey* next;% q) J- y# [7 `7 o" k1 f0 h& L
}MONKEY;
3 } l7 P3 Z! L! B+ P7 |% S l3 D& Mmain()& J9 G% n# j( V5 X/ d' F
{ MONKEY *head=NULL,*p,*s;
% g5 m; D8 O+ R: a+ g/ l$ y int i,sum=0,count=0;& j7 E# G: [- u, }4 H
clrscr(); //清屏
. E0 i$ R& y: K w S p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 O" u1 \" g, D; X1 F* f' J p->number=1;p->flag=1;
2 ?! E( {+ a) J p->next=head;
8 H2 Y* C! @) b7 Y. b$ k head=p;$ G$ B8 n& M& A+ v A( S
for(i=2;i<=M;i++)
B8 T( \. Q" M% d { s=(MONKEY *)malloc(sizeof(MONKEY));
% L+ i2 y* j7 ]- n! ?' D. Y s->number=i;s->flag=1;
+ d5 _8 a! v5 R: r s->next=head;; r) J6 _! D- k$ ~0 p2 ~5 g
p->next=s;p=p->next;. j u! |5 D2 R" ^% A: N' ^! j* T
}
1 ]; N) w/ Y# C2 L" X+ D8 g p=head;$ T& A, R& _9 P. N
for(;;)
- v* s5 c: a' M* C6 d) z, O" s {if(p->flag==1)* G& E. F/ n9 n$ y( s* E% e! l. s: Y
count++;
2 M9 k- }' i5 B. J/ U: Q if(count==N)
0 s+ o0 L3 u% a. A* x {p->flag=0;
" C C) m ~& B: f, G6 p count=0;; r$ i7 S$ g4 b* I
sum++;}
$ B( F1 [: b- p% m if(sum==M-1)2 A5 [5 M' k7 Z8 j0 [# z' A
break;/ `6 I; T% }. t1 D; V9 _1 A! J
p=p->next;
; V- n$ c6 m- m* k2 t }5 u3 F+ d4 Y* r9 [2 T9 M
p=! ? d% B! h; d T6 {: {2 M
head;
$ G( Y: w- Y# a5 H, Y2 Y for(i=1;i<=M;i++), l/ K* e- R8 q% I9 \- ?1 R
{ if(p->flag==1)
* Z$ @6 V+ V5 c: n printf("\t%d",p->number);
# ?$ G. t% @! J" \1 d p=p->next;
' j- I7 r' V3 l! f9 a$ F }
1 Y% z0 P5 p) p
/ y8 N4 C4 H; s% O( k$ K0 j P1 L* S! [
; ^8 z. |9 z. z7 x' E- |* C* v& ?0 X} $ T$ ^7 Q, M$ Q
第二种方法:数组
3 Z; P7 m- t" P' _3 `#include<stdio.h>
- S% e( m. G1 M. r p1 c% T$ U#define M 82 F2 F, a$ e) U0 G* H
struct monkey
" _; N4 c! x; A8 M) L6 {{int number;2 O! { ^/ j, ^7 ?6 w2 z T
int nextp;: {7 t% a' l. N8 }) [$ a% o
}link[M+1];
7 N9 i7 t; X8 _* V, t4 ?2 R
. V+ o/ _& `" ^& p; f4 h2 }void main()9 `! R7 i! a- P+ ] F
{int i,count,h;6 A7 [, O% V$ D+ S, j
for(i=1;i<=M;i++)* U* \" [% d0 s
{ if(i==M)
" m% y- F9 S2 @3 T5 A link[i].nextp=1;6 h1 f& c0 q, d9 n9 i
else
: ?2 @1 e; V, d# T: i! i link[i].nextp=i+1;
0 G$ y3 O& {) S) X& i link[i].number=i;
( Q" `' t- y6 }}
- x: |% q; j( f& xprintf("\n");
( H0 y' \9 s2 m3 P$ j, acount=0;
: m/ x& ], j! p; Bh=M;( q" D( a) \- e7 f: G, `* D/ E
printf("依次退出的猴子: \n");
/ e# d) b. X' o* _while(count<M-1)3 P) F( A, D: o8 e
{i=0;! J( x! q' G+ e* p
while(i!=3)/ s, K0 k$ C6 }2 E
{ h=link[h].nextp;4 y$ @7 {/ }. `6 B) s/ u
if(link[h].number)! I2 Y) }% L' `( }. P! r9 S
i++;}
$ }9 l7 \- e% I# G! D
+ s( Q( R: `0 U" [/ R: ]0 U5 Yprintf("%4d",link[h].number);
0 N+ H% H D/ E5 _1 k5 ilink[h].number=0;
% w3 e5 D3 E' }" Q8 H/ ^2 f0 zcount++;" A1 ?4 H' A4 j" P7 B; C
}
$ ~4 m. w; h! _1 S+ H
9 J |' w$ }+ R; _! n% gprintf("\n大王是:");+ M0 B% b/ ~# e
for(i=1;i<=M;i++)5 k! I8 \$ N0 C
if(link[i].number); E8 L6 {7 j$ V* q0 M
printf("%3d\n",link[i].number);# g1 w3 e4 y! i2 v# H& B5 {
; O! J! F4 _, w3 r# T+ S
' l+ q) S5 m0 b9 C$ h% Z} 8 l2 g& H& a) _+ ]& s
第三种是普通方法for循环% D0 p" ~: M5 f: `! Q# w
#include<stdio.h>* j& q U+ [( n7 P4 v
void main()% f! x+ E2 C3 }" F( Z7 X
{ int i,k,m,n,num[50],q,*p;, c% Y7 g$ j( j' B7 b2 u3 ]
clrscr();1 b* w. z# w, O$ E
printf("input number of person: n=");& ?- s' B2 s" f z
scanf("%d",&n);
6 @; y8 e8 e9 [1 f" Bprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
- |( l S- ~3 K4 g& Q) N& X/ c! s scanf("%d",&q);
' [- U# t. y) r$ `( Q2 | p=num; ]+ v' A4 a$ h T$ V
for(i=0;i<n;i++)
9 a6 p. x, @! I6 n& N1 T; Z% h *(p+i)=i+1;
`; {* I0 D5 p5 h! r1 [8 h9 T* m i=0;: s' z5 M3 S# ^
k=0;+ Q# g, {1 h- ?
m=0;! g1 E+ k ^" Z- j8 I2 \" G
while(m<n-1). I/ v5 @6 t. n/ C
{if(*(p+i)!=0) k++;- J& i4 _7 l! A0 c
if(k==q)
% T4 V3 T1 b* L; w { *(p+i)=0;
) n2 f& r; \% p5 m! M: L3 M k=0;8 y: {7 N; \5 u
m++;: b( w9 C% h4 m
}
: `- e, h7 d+ C9 I+ N i++;
; g0 i8 L; H, R7 F8 M if(i==n)i=0;
0 {# t F5 @- H4 c% C8 _ }7 l1 ?& ~$ b$ G' G% y" ^# M
while(*p==0)p++;) @3 L6 |- n' q& I, G
printf("The last one is NO:%d\n",*p);
; H/ _9 o+ B- k/ A* T' _ getch();
8 M8 }8 M- n" w; g7 s) @8 w- E5 v* f+ h4 a& t
} |
|