|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ S- y0 ?9 i. M这几天我在忙着编一个问题,我用了一种方法编出来!
~2 `: q+ E$ V; G, A. }但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ C/ v6 f0 j3 J! U( u9 |
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% B p4 ^8 `" K: c, K$ {# a: @# C4 Z1 @( w3 H3 \
5 w9 @# }) c; [! v/ A
题目! \5 L! F7 M$ l& m; v
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。9 Q1 A5 O* g2 F4 d
第一种方法:利用循环链表
: y3 W7 N& z+ q& z! z! p% J#include<stdio.h>
w( X6 ?6 x! \5 I6 G# K, S- y#include<malloc.h>
% E h5 e* B( L; y j- c$ H- ?#define M 8 //共有8只猴子
5 s8 t( E6 z9 d- ]( P8 o, H3 B#define N 3 //数到3只时退出第三只. H9 H Y: U2 i' ?4 F( M e: s
typedef struct monkey" m0 g2 q/ b( D* W. L' U
{int number;
5 a1 { R1 y. M! F9 G! k' [int flag;
9 I$ {" r- k" y& Q+ i8 Z% q# Wstruct monkey* next;- S0 f! i5 X( o
}MONKEY;
, w" x7 @) @0 S1 P* t$ pmain()
' }3 {8 e$ U% w3 r( f{ MONKEY *head=NULL,*p,*s;+ J, U7 N- ~: j; P
int i,sum=0,count=0;
. c7 v I; b- h; e z2 s3 M clrscr(); //清屏8 {6 B9 e% `" j1 E) c
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
5 |, n4 U6 K8 N5 O, f9 T4 \( W. H p->number=1;p->flag=1;/ j3 c, F2 h; y6 U; Q
p->next=head;0 }, }) E o" n0 y
head=p;
, T0 ]2 ?, Q$ h2 }. E for(i=2;i<=M;i++)
" ^6 `) D8 v5 g0 @ m: R ` { s=(MONKEY *)malloc(sizeof(MONKEY));
( S/ r1 j: |% r1 s s->number=i;s->flag=1;
! N# y: V6 E9 m" T4 c3 [, v s->next=head;
, r# n) {7 |0 m% x! {; w. I p->next=s;p=p->next;
. v, S. b! Y! s/ V. [ }
6 m6 v# K6 H' z p=head;
5 f; O$ k, p7 L: | for(;;)
! ^ N, t& }0 r4 w& U& G {if(p->flag==1)
. M% j+ N9 m3 T' C' Y+ |) z! X* h# g count++; t$ v r5 l3 _3 h
if(count==N)5 [: v: ?# I8 o4 O- r# i+ N9 T' j
{p->flag=0;
9 {1 v% t; s0 { count=0;
& D `$ s* g z6 `, f' }& W+ g sum++;}- w' T b$ r# ~
if(sum==M-1)
: N, `) z% ?$ u) @* f; r3 e break;* f% J0 s* ?9 Y& ]* ]
p=p->next;
3 q: K& o: h' Y3 _ }
3 |: ^5 @# \! V) J, { p=) T6 k2 g4 E- R9 j
head;' s7 y5 h# n$ G
for(i=1;i<=M;i++)! X" U U0 F7 C: X
{ if(p->flag==1)
& L# x, _. l6 }! R printf("\t%d",p->number);- E: D4 O* i4 @- b
p=p->next;
; d; a3 a+ q. z9 Y! ` }( Y, W# n# B$ l3 T( G# L3 L2 j
. p' _# M% b: u# e& X' ~
; L C8 R% g- s% N
2 p7 {% L/ x0 N$ V( X. o; z/ r}
* D+ A$ ~# f9 O第二种方法:数组
: v- m# X- r% ?( f! J6 f# N) n#include<stdio.h>8 |8 }5 L) n) W& X, N' G# F
#define M 8
# }3 e6 f: _7 p. h9 istruct monkey' [6 P) K1 t% O5 M
{int number;4 t4 D* p- [" Z. ?
int nextp;
* G, q3 N- M% \}link[M+1];! F+ _& L5 ~# R
; M/ G5 ~, B8 ~void main()$ y) y/ |+ t& k1 B8 D* P l8 Q; C
{int i,count,h;
2 S' \3 Q7 T Z6 A( E: z dfor(i=1;i<=M;i++)
) ^2 v! u/ S" P; q{ if(i==M)
, q* s3 W {9 c0 v( p* ` link[i].nextp=1;
$ b, s, R/ d3 o3 O- g else
) Z( m+ k! g. z link[i].nextp=i+1; X* ]+ o6 [% u1 `$ c2 v+ W6 M$ ?
link[i].number=i;
- I$ R$ G9 l4 y1 e9 \/ d( t}
8 \$ \; c' p% Y5 x0 ^' lprintf("\n");% M$ o( ?- c& I; u$ z+ _
count=0;
6 J) X0 c5 m5 W) Oh=M;- L9 ?) @: c+ S- B3 q- `" H
printf("依次退出的猴子: \n");* {( m' I# Q* i1 v( p+ z
while(count<M-1)$ f. Q2 `& F7 e! G0 k% T
{i=0;
& d! ^4 g" \! `, M9 P- O+ xwhile(i!=3)5 x% W" M" C' o v' u
{ h=link[h].nextp;
, ~ y4 v7 @5 h+ L if(link[h].number)
6 k E; B$ S9 ?% A i++;}# z! A6 _% C0 B
' E, d. M7 H1 e; [) O& Kprintf("%4d",link[h].number);
- G1 @* |# ?) @3 elink[h].number=0;
. Y. o5 q/ o" s8 F9 W- Ucount++;
6 J: a# J7 _0 z0 a* ^* a}3 l, O4 ~, s% q& f9 b
, z# _; I* V1 V9 O2 U: @/ D% xprintf("\n大王是:");) b/ ^% U& _7 @9 l4 w
for(i=1;i<=M;i++)
3 c* H5 `4 n' z/ w: s8 a, h if(link[i].number), o( W2 t# |' f
printf("%3d\n",link[i].number);) Q' r* d! g4 J8 n+ T2 w( T
# X0 l$ u; _4 Q$ o' N) t0 n9 ^7 W6 \5 E: D
}
% }! R$ |2 z# k3 y: I/ \+ s d第三种是普通方法for循环
) f9 U) d% f2 V' h- w" t#include<stdio.h>
9 n- M' i: W. a2 q; z3 r Zvoid main()
+ F* i9 z8 G9 N7 s# ?# R{ int i,k,m,n,num[50],q,*p;
2 `$ x3 E, F P. T9 z clrscr();
3 k A5 }" {+ T9 n+ m" O printf("input number of person: n=");
( H& r% }8 e- C' `4 s7 S) U+ N, p8 A scanf("%d",&n);* n1 f8 O; B; C: C3 z) U! a
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只; o- [1 Q$ X) K& s; `
scanf("%d",&q);
8 I& Q" N% n! C p=num;
4 p2 V" i; O; T2 r" p7 K for(i=0;i<n;i++)
- n) v; {- b& C/ v3 T- d7 } *(p+i)=i+1;
- {+ T* g: o. ]! W( ]* \0 i; L3 Y i=0;0 ~. p% D! H G5 o1 o
k=0;- j' Z* N$ A8 ~2 ^/ L, N# P+ h+ K
m=0;
" Q1 h/ N" W$ N1 U: W( y+ t' b/ G0 W while(m<n-1) _. i4 \' b% K+ n8 u2 o
{if(*(p+i)!=0) k++;
& Z$ s; P/ D! a if(k==q)
- {9 C/ o* }/ @3 s9 d6 @ { *(p+i)=0;
' _% j+ c; D2 r' y k=0;, ~4 L& W F& `
m++;
/ c) G+ B9 W& c/ B }
) ~3 S7 Y6 n% g9 y i++;
& b4 d; T, ]+ R7 {) g6 n1 z8 \ if(i==n)i=0;/ f" D2 R l# T) q
}* ~) T( ~( e$ O/ a: \
while(*p==0)p++;& U! L$ e4 O. C0 y; U G
printf("The last one is NO:%d\n",*p);, Z7 |. G; y0 W, ~, Q
getch();
& Z4 F' S# x+ `, P
; b1 J4 a' n' N7 o/ j} |
|