|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
4 C* T4 t- H; L& L8 _4 n3 u这几天我在忙着编一个问题,我用了一种方法编出来!
" l: R. Q% ]+ J: d1 \但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
& b# N1 O' T' \- F# d注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 . S' _$ ^ M; C, Z$ l
: `% a6 i* S# J& Q' K1 @3 o/ ]
7 Y' S4 x- H( I$ s! x 题目2 }! e: D) l( u3 o3 L. w- C
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
, ]: s( [6 Q8 n# {第一种方法:利用循环链表
7 v- M$ N. F/ E! G#include<stdio.h>2 C, [. p$ D/ P# t; v3 s* P
#include<malloc.h>
4 T* V3 t# H) S& D1 U- ` N- e' n; i#define M 8 //共有8只猴子6 _( Z) g) w0 [
#define N 3 //数到3只时退出第三只8 n* A0 v0 |; a# [1 {2 k1 I* e* z
typedef struct monkey
U1 R; k; [4 G/ F' C; r{int number;) C3 `' X4 ]3 H9 D, F; y
int flag;
/ y# m0 E g5 _struct monkey* next;
$ `: q: K* r! f- s% B% V' m7 E# s}MONKEY;
: Q" C4 @. Y3 D; o3 ^8 }main()
2 e* T8 d9 X7 c* U* g; }{ MONKEY *head=NULL,*p,*s;
# t6 P- v0 @& ^! Z. e int i,sum=0,count=0;
) s7 s# L6 I1 d+ [ clrscr(); //清屏
) L+ o& N- R# m* q' n" {/ ]' A1 t( { p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
- S6 x. P1 `* x7 {; e, b3 O p->number=1;p->flag=1;
) ~6 a4 v9 i) ~- O: [% [ p->next=head;
7 r: n9 B+ ~, g$ Y$ V V; h# w7 m head=p;
" P6 c/ @- H; C a [ for(i=2;i<=M;i++)
8 n9 D9 _& _" {0 e5 v, g { s=(MONKEY *)malloc(sizeof(MONKEY));
. T s# i# `0 e0 k& E% d6 k s->number=i;s->flag=1;
! K" D u- m! R: T, z* \: m5 Y# e1 a s->next=head;. s9 |* o2 T7 }, \( o% f5 |! {! o: W
p->next=s;p=p->next;
2 Q- C/ ~$ K8 V5 N }
( x0 {* d8 E! K; \1 u$ c p=head;
1 E7 H. s+ S, K- `( Z u6 t4 x& l for(;;)
/ L- g2 k# X( Z$ {+ l( I {if(p->flag==1)
; |; ?9 A( r. g& N count++;4 h8 h: y( b7 a* Z
if(count==N)
8 c" v! |% {1 B5 _! F {p->flag=0;. X' l7 `2 W! F8 I9 M( _
count=0;
G& c0 I e, F" w. v/ [8 F4 I; v sum++;}
$ a) X& B* g0 k# C7 q1 t if(sum==M-1)" X. b( W. f: N- `* I, g4 a
break;
$ \' q- T* u* r* |$ g0 G* z* Y p=p->next;3 w4 o8 v& Y k- L3 w
}
/ Q( e+ ?, ], T5 b p=
3 i( m& ^& p+ B1 f0 Z1 Y6 N head;6 o$ Y" B" G1 A f( D- T6 |
for(i=1;i<=M;i++)
$ E2 [/ _% q* v { if(p->flag==1)" ?! ^$ A) S% O* c
printf("\t%d",p->number);0 e. X3 l3 _- X1 o8 u
p=p->next;
4 s* }# A$ i) h2 i }" h5 i- k* G' A/ t9 l. h: _
0 w3 z3 l7 b3 Z5 j
( c) l0 b |1 O: r1 W9 O! b
; H4 W+ C9 E5 T
}
* ^- V. R5 ?! I s第二种方法:数组
) `; f1 x( Z4 u5 r#include<stdio.h>
B" k9 A N* L! l#define M 83 D+ w) {+ c4 a/ ]! K o! J
struct monkey
" W; O% c8 O7 t$ M* _7 Z6 o{int number;/ O4 ^# z, h/ c( _7 E8 @2 H) P6 W% U
int nextp;
% K' M' K V( u2 [}link[M+1];. H" _4 V; e& e
6 i* H5 O* I% f" q2 ^
void main() v0 R/ ^# p: V& s' ] B0 W
{int i,count,h;$ s: B7 y( U& N' ~4 j
for(i=1;i<=M;i++)
- ?8 R% |1 ^( C{ if(i==M)+ [2 ]! l! u- v2 \" k# r5 Y" Z- \/ p
link[i].nextp=1;0 r; I9 }+ u& ]9 |, W
else6 R* h. y+ a: d$ z6 v* a9 l7 ^
link[i].nextp=i+1;
5 C5 S# I: S+ q+ B. Y/ l link[i].number=i;
. s& Q$ N0 m0 a$ e2 \4 X( |}& l3 V1 ?7 F5 ]5 i1 L$ }
printf("\n");
1 g0 d( `8 X# y# [count=0;
9 `% [+ R, A) x/ {* rh=M;
B3 S2 x; f$ Pprintf("依次退出的猴子: \n");8 Y3 a. O& A) k) W
while(count<M-1)
8 ?4 `2 p, g8 A- V{i=0;, b S! C4 a, Q4 P! f6 T. e
while(i!=3)5 z0 j4 _1 w2 j5 d
{ h=link[h].nextp;2 {) P! X* ?4 \
if(link[h].number)
& V# Y$ U+ M" {- R i++;}& }2 P9 X5 C) `5 Z
- \% D. `/ {, zprintf("%4d",link[h].number);
' t* h8 H4 l6 x5 z5 T+ glink[h].number=0;- n e7 }( k, I3 Y) d/ ?
count++;
( `5 J1 N6 h0 ?5 M2 b w}
+ _5 S- m% _' |: R- m
1 g( G8 \1 z4 x- B8 \" Jprintf("\n大王是:");- o, a2 J8 [; }
for(i=1;i<=M;i++)
4 n/ ?( E$ ^" t" R. n* d8 K; N if(link[i].number)
* }- P: k+ T9 P6 t6 Y8 S+ s& [ printf("%3d\n",link[i].number);2 l. Q2 F( [7 T' ^. ]
4 X8 j2 @* o6 P2 @- h2 @4 } l. n% Y1 o8 K& e$ D5 ?
}
- G6 z) x/ S2 r9 ^7 z. s% i2 K. m第三种是普通方法for循环& N: G6 o) ~4 J: ~
#include<stdio.h>
: t1 V; u$ t. N2 K& t6 w/ Fvoid main()
: ` d* O6 \; b y5 r{ int i,k,m,n,num[50],q,*p;
o4 P8 g' K$ q2 I3 M4 A clrscr();" X: @2 D7 t5 `
printf("input number of person: n=");, `6 T1 p* H7 w
scanf("%d",&n);( |/ Z+ E9 I \) {! ]1 A
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 h7 h2 e) C- Z scanf("%d",&q);' J# r! z0 V! [4 V) h
p=num;
* y+ s9 Y4 Y1 o; }' p; T8 x$ d/ w, t for(i=0;i<n;i++)
4 a( @5 O* d/ \ G y" u *(p+i)=i+1;) Z5 v- P, V# L) A; D( Z
i=0;" l( Z- k5 R) t& h4 M
k=0;
& H9 }) ?7 k1 d. R# F m=0;, W% `! J$ i' `+ q+ C; |$ x6 C, O
while(m<n-1)0 i( J# }3 x6 J( V
{if(*(p+i)!=0) k++;' p' F: @% R' Y! ^
if(k==q)
$ ^" h- D$ b* q0 t3 e | { *(p+i)=0;
4 X' d" v2 X% I6 B k=0;
# Q3 X9 M* a; w. h m++;0 h% ~& w1 v T4 C+ {
}
1 f. v( o% ~. X0 C8 X i++;4 {9 t" L& J/ \# {
if(i==n)i=0;
2 h8 [0 y# Y% X }; R; K! S/ C* ^! K! C3 e
while(*p==0)p++;
" J" i" W. w7 z* U5 u; X+ L' i( p& o8 H printf("The last one is NO:%d\n",*p);2 i7 N3 {/ ]$ i$ E9 D- L2 M
getch();
8 j; t6 ?; o2 r3 ]8 T" D+ J8 L+ }0 _3 G* `& ~8 u% B
} |
|