|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
4 ]# m3 u* P. S" v; v这几天我在忙着编一个问题,我用了一种方法编出来!
~- a3 y9 U7 v但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!) ]( L% J! _2 G. Z, U# Q
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ! i$ k( Q5 _, Q
0 f6 R1 Y5 N$ o0 w0 s; U
+ Y+ h: b/ W+ g; A( j: c 题目
1 H5 x- e5 h: O$ k; x z! C山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' e+ Q0 T1 d; S+ K
第一种方法:利用循环链表6 D# R' b& l9 {7 Z" D0 ]6 h
#include<stdio.h>
- e: D) ~' R# W#include<malloc.h>- X' R& O9 X; v: @* M; W
#define M 8 //共有8只猴子4 W# K% s5 N5 m/ z$ o: d
#define N 3 //数到3只时退出第三只& R3 i6 R+ t/ i4 A
typedef struct monkey
" ^$ R5 o: H' }0 ]) {- s" s{int number;
8 @- d6 v2 V d' h# K& T* W! @/ yint flag;
! U* D, V- g' p+ i+ Gstruct monkey* next; k& x4 _7 d8 R; |$ Z
}MONKEY;% p R0 g; H! Y7 [6 o, k! z& \: e
main()
( I. P) x" d Z$ x{ MONKEY *head=NULL,*p,*s;
( g! L, v# @0 Q; l" Z* E! |" A int i,sum=0,count=0;
% B0 I5 E1 C$ l1 \' h clrscr(); //清屏
& |. K: ^: L/ B* ]+ I* Q# F8 c% S$ m p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
1 t1 q2 i& K; p5 l, k+ H5 p4 i p->number=1;p->flag=1;1 ^% Y% D% D3 B* G# [
p->next=head;8 f$ P* S i& e$ w% _3 T9 o
head=p;- [; g1 T( t7 I/ @$ ~. M- l5 g
for(i=2;i<=M;i++)* i) { X$ t0 T% M
{ s=(MONKEY *)malloc(sizeof(MONKEY));
# f( D5 f1 E, h$ M s->number=i;s->flag=1;
1 J9 d5 z1 o: h! `" ` s->next=head;
v; i$ u5 U G* I4 H p->next=s;p=p->next;7 h8 B; V6 r7 }! l9 I8 F
}
& [( E2 b7 c+ D' D5 e1 y p=head;; q2 ~: e6 _- {5 n! n
for(;;)
0 o2 k3 V: ^! Y; R2 h; w4 x: E {if(p->flag==1)
5 G8 h: w" S l0 r! T' Q0 S count++;5 ~0 Z7 q; ` p
if(count==N)
3 B/ D! L) \, ^0 o/ B {p->flag=0;* }" J- z8 L5 `
count=0;
/ E5 W' X, @3 m sum++;}
. D$ w1 h2 y1 _ W. W if(sum==M-1)0 d. X6 Z( g) a9 X% R. H
break;
7 i+ d: L9 a$ ~" ~* Y" [ p=p->next;
" m4 p; X, x% x- C }& Q" H, }8 o1 Z1 {
p=/ |) A& z& `" F5 P; u
head;
" L2 P; B9 x3 i! E$ c1 d3 \ for(i=1;i<=M;i++)
, [/ ~' H5 X; S: A8 M( J# K7 ? { if(p->flag==1)& X/ `( J% N- l2 [
printf("\t%d",p->number);( T3 u- s( v; O& D$ `
p=p->next;
- L4 C: I. ^6 {: b) f3 s }1 T# r: |3 a$ g* Y) t
' @" }3 A! ?+ J7 b- W+ k5 @& K4 ?
/ \6 K) u. |6 a) Y6 _- j8 l
8 x; I* F9 d4 v. i}
+ Z z! h* P$ n! B0 V4 t, P: P第二种方法:数组
1 R! ?; I- E2 u* Y- g/ w. k2 F8 x6 X#include<stdio.h>, R+ r" _; ]2 g
#define M 8, a+ f7 @5 o# m- j; Z- m
struct monkey
3 @! A& G- g5 u8 g8 n* X{int number;3 D0 y) V" I( ?
int nextp;& D% B2 |# g4 Z% E, d
}link[M+1];
# J, H; [5 u7 Z1 o! c- b2 X3 V: |9 b
void main()7 w/ }+ T( z* c+ \ s
{int i,count,h;3 ]3 D" }/ c: w4 w# Z" B! s
for(i=1;i<=M;i++)8 H$ ]) E" Q' j+ f1 I
{ if(i==M)
3 c3 y" B5 v7 l, M7 [5 e, e link[i].nextp=1;4 t/ M; m- L5 H% d
else
7 v3 k+ y2 o( e9 q* X: {" y link[i].nextp=i+1;
3 R% p4 h4 t3 P link[i].number=i;
1 k; U6 A" Z, I$ I} A! s+ F0 \ Q, Z' m8 g5 |
printf("\n");
. \2 B+ L% g H+ _: g& k/ Rcount=0;
$ S# z* @ L8 S2 b" hh=M;: S7 e3 `8 O4 v8 y* g4 W$ U
printf("依次退出的猴子: \n");
% j- c. z) t* g( f7 iwhile(count<M-1)1 g+ t; s' K" Z! ~* f3 v
{i=0;
, i( D& d! ~% P m& \, Rwhile(i!=3)
& K# |- X9 D+ @8 B{ h=link[h].nextp;7 \5 ?+ k( w/ ^& r" O
if(link[h].number)
8 o' C! z: v/ O! d9 D i++;}& [+ B1 q- V) j9 x! @4 o- f
# T' r& L: R7 B) W) k& Hprintf("%4d",link[h].number);1 o, s* [ R& [2 p4 T- o
link[h].number=0;+ H) R4 P0 S H8 r' F; E
count++;* m0 a7 N+ \8 W+ h+ b8 [
}
0 ` y- ?" Z, Y4 j. }; H" u
% T. ?! s! G9 Lprintf("\n大王是:");
' n) V2 w# W1 F/ }9 t# T0 J2 a2 ` for(i=1;i<=M;i++)
' \7 P( a9 u; ]3 O+ n if(link[i].number)8 ^8 }# g j7 u9 e' Z1 Z% V, O
printf("%3d\n",link[i].number);
7 X3 @4 s& a! B+ R+ h$ f& b p! a$ y' G# M1 d4 A% a1 ]
' ^$ q' ~1 x' g& G0 m* C} * D, m: T: i( K' ^7 ^6 P& H
第三种是普通方法for循环2 R1 V7 w2 ~) l: U6 O: x& K9 S2 }
#include<stdio.h>
1 A9 c# P1 V% O' ovoid main()
* h* F w% p( X m0 A$ E9 C6 c' D q{ int i,k,m,n,num[50],q,*p;( ^- J) b/ L! K5 w% ]% e
clrscr();9 B9 c- f/ W# Z. [& t
printf("input number of person: n=");
0 N- Q* W! |* N0 w1 a) D scanf("%d",&n);
, L4 H% _4 M mprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
2 A2 M! M Z$ C* y, K% r scanf("%d",&q);
: a: @5 U {+ i: U p=num;- Y5 ]7 T3 B4 g; |+ T( d+ F0 Y) w& A
for(i=0;i<n;i++)! K- W( K; e0 C% p% T7 H- c
*(p+i)=i+1;( p, |7 o, L+ o' ~% K1 F# A5 B
i=0;
$ S9 M ~2 c2 x$ \3 @% i7 p k=0;8 o/ Q2 \, `3 H d) J; p/ L: f9 ^
m=0;& m+ H* }' g; b8 V+ N* K
while(m<n-1)
! E( R& x) p" S {if(*(p+i)!=0) k++;
& x; M4 L" w9 K/ }" J if(k==q) y) l* L' j1 @
{ *(p+i)=0;5 ?4 L7 M5 Y6 P) i9 h4 Q3 n+ w
k=0;2 o$ N& e% o0 ]- z* m
m++;
0 x& J: G* ?+ j }! U/ O2 J1 E) C& V0 Z; V# j% Q) |
i++;' W. \( a8 e. E1 [# A4 ]
if(i==n)i=0;* b- T6 G, v0 u6 I e% g, k* J
}+ \; P3 K) N3 R
while(*p==0)p++;
j6 f2 j$ |5 `" W6 |7 ` printf("The last one is NO:%d\n",*p);
7 ]7 ~$ G4 M/ ~) L) a getch();0 D7 i0 O5 ?: i7 k2 `
, Q* k- h% u) f! G2 g& Q9 M
} |
|