|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!' {5 p0 B6 c W5 G4 t8 z4 A
这几天我在忙着编一个问题,我用了一种方法编出来!- l( q, m6 a# F; Z
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!, c& j+ {5 I. L: I2 P8 ]
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 / @: }5 o) G. c
" J( N M$ {$ q# z3 ?0 L( X, G5 ~* ?
! Z% o3 n4 J: S/ B
题目0 \+ b+ p5 R+ ~
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 i8 S$ {/ T7 W3 Z第一种方法:利用循环链表0 u6 |6 q1 D7 V1 p
#include<stdio.h>2 O7 p9 Z/ Z, H: J5 H
#include<malloc.h>
; `+ c% ?- }) G7 x#define M 8 //共有8只猴子
" ~. F$ K( a0 `4 m$ P" B#define N 3 //数到3只时退出第三只/ I! P0 R6 A4 F- G
typedef struct monkey0 p U. Y% G' W
{int number;1 O" R2 y2 `/ t0 @& {9 X9 ]
int flag;" F5 |* r6 u7 i. y% c
struct monkey* next;
8 K) B B2 ~: `$ ]/ [! K( T2 x2 e2 v}MONKEY;
) L" B4 c, a4 f$ Wmain()
9 M5 J% b4 s6 m! p- x; Y{ MONKEY *head=NULL,*p,*s; t8 P; q6 Y1 d
int i,sum=0,count=0;$ ^: }7 A: o4 | d1 H
clrscr(); //清屏) I& `6 u1 P& E7 L! I
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
$ }) B; R6 g4 N: k2 n p->number=1;p->flag=1;
* Y% {3 D1 z7 t# b7 [, c4 Y! Z$ f p->next=head;
6 `( f, y$ T, K7 Z+ W' D head=p;
2 L1 l+ U3 A8 J for(i=2;i<=M;i++) h# {# C3 }6 u/ e7 C: P( ?" y
{ s=(MONKEY *)malloc(sizeof(MONKEY));& g7 C; o6 F. c! n* c7 k
s->number=i;s->flag=1;# C/ Z4 X3 D) u$ o
s->next=head;
; G& b7 E& `1 w6 J# U% ^ p->next=s;p=p->next;8 Q( i9 x# I" P* j/ M; \% J
}
/ {: I" q/ _/ @$ b( b# t& ^1 T p=head;, @( q) c( P. \% y" K% F* Y
for(;;)
. D! e3 {: n# d' X {if(p->flag==1)
! Z1 @4 Y+ r" u9 c' o0 k' t& H$ [2 [ count++;# c: K% ^+ P& U/ m/ s* \ p
if(count==N)2 n& S B( d. ^" ]! c3 d( z4 g4 ?5 q
{p->flag=0;
% j) f! u9 V" h! p7 V3 g+ u count=0;
8 B" s x- D& t, l' B) u sum++;}; }2 T+ x& k; o2 G) G
if(sum==M-1)
5 |) T* f* N9 X9 s9 I break;
# c" ^& K4 y$ K p=p->next;
/ n( {8 u* n* c: l }) N- Q4 B: H. O) _7 r1 B
p=1 G% T: V- o: X
head;
; F/ v" M8 v- @8 k0 [ for(i=1;i<=M;i++)$ i' O3 t$ p2 e# d& i$ A6 |$ v
{ if(p->flag==1) v# W ]6 ]7 w) @6 r
printf("\t%d",p->number); G1 R. K8 ?! O; E9 ]/ i0 X! }
p=p->next;
* m1 l; N8 _; N# ^9 s/ ] }, W8 D9 w& `( S1 ~/ M# g8 @
n) A4 ]2 j% r$ B0 E s
( H% @9 x$ H. d0 _( L" K" Z E$ b9 g
} ! j- P" H- ]- k g- I
第二种方法:数组% |( J" s7 g3 W, P2 T
#include<stdio.h>, @6 i7 i1 Y. M t
#define M 8
* n9 K- N, a9 `' t/ z2 | Y& Q6 a" Q( xstruct monkey4 m8 y( a, C0 |- X- L8 [( n
{int number;+ x8 Z$ ~* r6 P) s# A, w4 R4 ^
int nextp;1 c+ R6 v# l2 `
}link[M+1];
- P3 H( g( i" q* l8 i+ L
. |, I5 |& _+ Gvoid main()! P1 T5 q$ s( ^3 `
{int i,count,h;
( j! h! K4 d( g9 N' B! Ifor(i=1;i<=M;i++)
, R5 x5 S6 D0 D7 K3 a2 j{ if(i==M)1 Q4 r+ D( [ Y( V
link[i].nextp=1;
2 Q9 @3 c+ c F* z( B else
$ A! b# i1 l& @ link[i].nextp=i+1;
' z4 h" R5 P+ V" ?$ X; g4 l link[i].number=i;
$ S( y2 p8 H$ P( T' ~( @$ m5 t, N}
) K* F& h! U: S8 h/ G% g/ ^printf("\n");0 W! ]/ W6 q! x' O7 [8 Q p
count=0;
1 r8 g% |' ?% o" b9 ]% ~- i( ih=M;
; b2 [1 n8 w! H4 hprintf("依次退出的猴子: \n");3 }% J5 D5 {0 ^4 [! [5 h0 b3 D
while(count<M-1)& i0 ~2 \6 W& {6 p) X
{i=0;
3 r) g! N* Q# I/ E+ g4 Z( Mwhile(i!=3)
9 o+ S& c' p" `# `7 @& l+ I9 d{ h=link[h].nextp;
+ x( o6 `5 T3 e" F/ M6 T) Z+ A% X0 Q if(link[h].number)- I O* n. a% Y }
i++;}. M: ^0 y& y7 _& L
! O/ i% z C& [9 @5 o6 X4 F4 P
printf("%4d",link[h].number);
) a$ G3 H* m1 _$ Dlink[h].number=0;4 Z' i" n% b' X' R" M9 |8 K$ F
count++;* L/ x2 f5 L: Q1 D
}
' R9 O+ |0 L" O% q4 B) X/ s, Q8 l+ `1 ?) C# u# d
printf("\n大王是:");& H7 Y, M2 X$ k [; @: i$ t
for(i=1;i<=M;i++)
% H+ w7 j+ a" A- a. S l% e5 p+ y w if(link[i].number)6 |( L- `2 L1 n. ]% Z
printf("%3d\n",link[i].number);
" Q$ r e4 ?; q _) B4 }' X3 J, F' E, o! V- V8 a
4 E6 w7 Y$ @ H0 E/ E o! h
}
* e( ]; V0 W4 \$ S- A2 k8 \第三种是普通方法for循环( T# D& S+ d, b/ d& R0 q/ e
#include<stdio.h>& H$ p( L. f9 H' G( g
void main()
7 Y& u6 d/ `! C{ int i,k,m,n,num[50],q,*p;
3 o. Z x1 m$ O) F2 S# l* q clrscr();
3 z1 F2 _- `5 ~4 p- q% ~ printf("input number of person: n=");7 `! v. p& P1 C2 O
scanf("%d",&n);# G* O2 Z9 F# y& b+ U0 v
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
1 r1 s/ }- |5 `& p) ~; a scanf("%d",&q);
$ P& {8 z4 M0 Q p=num;
+ |5 a% k9 O/ Q8 Z* C' ]# h for(i=0;i<n;i++)
( L+ e0 V8 R6 ?3 x: }! V! Z! Z! X *(p+i)=i+1;
# V' C) b5 E& x8 w% s i=0;
) i! e% ~0 E. \% y5 U+ ~0 ~ k=0;
& M- I; V" c* g+ B0 f' |2 H5 P/ h m=0;+ F2 o% n; g2 l/ x: w) r; j. }
while(m<n-1)
# s8 \9 x+ Y9 s% M! Z {if(*(p+i)!=0) k++;
9 J# w2 F/ D) j. Y& S7 ^- h if(k==q)
! b5 H n9 y" o0 _ { *(p+i)=0;! B! c1 v& X+ Q1 a$ c0 ]% o I. q
k=0;5 H& v1 ~1 y: j2 _% W1 Q: v
m++;0 f. G6 v; P( b V
}8 f3 W# M( D8 A( _' v" n
i++;- R. j1 s) @8 L2 a# j
if(i==n)i=0;" g+ v0 \5 s5 g1 f& [5 X% `
}. _3 }* Q- s" c8 u
while(*p==0)p++;* y7 k9 I' m5 l; X8 Q
printf("The last one is NO:%d\n",*p);
, q3 h% ?# Q! G" }( I' b getch();9 I/ }, s" w, X
: j" n2 k) a# y: Z# C; n
} |
|