|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
6 L B" D" Y4 U2 Q/ J5 {) j这几天我在忙着编一个问题,我用了一种方法编出来!
2 w8 _% s- @9 M* d( c/ i6 v8 X+ z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
+ j0 E$ K6 x) B4 V: i% @9 i) T$ v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 R/ G# q" L# \- P9 |; ^" q, X0 H2 P1 |/ ~. n/ y( ?5 B0 Z
; g1 @1 {8 e6 k
题目* R6 V. j+ }6 X4 N+ i
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。2 L) b0 z$ o; }
第一种方法:利用循环链表
# `0 O1 V5 [+ F! }. w8 j#include<stdio.h>- L* ^) v Y9 m6 W- a" N
#include<malloc.h>
* \; h/ H# i1 l1 A7 }3 X4 v Q4 L#define M 8 //共有8只猴子, H9 a9 N: w& P1 }
#define N 3 //数到3只时退出第三只/ n1 N6 {$ f' J _. i2 v5 `' k
typedef struct monkey3 W& y8 ~+ v8 r4 K. l: Y
{int number;
6 ?! f, A/ k$ ~/ Z3 {% f" Y' Bint flag;
; u+ ~. ~0 \7 D* X- xstruct monkey* next;' T& r/ F9 `, P4 V4 Z9 ~- r
}MONKEY; V5 E' e* p( y# H8 Q
main()
- ~ ` }' }% G U{ MONKEY *head=NULL,*p,*s;' k" e. f8 w% g! d" ?
int i,sum=0,count=0;$ u- N2 y) q2 `3 v( U
clrscr(); //清屏
j: ^. p* E1 f$ ]+ ?( U) b p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存% q; K3 L. h! e
p->number=1;p->flag=1;' R* i8 w" ^' n( Y6 u& K
p->next=head;& g: ]$ a, @6 f2 | l
head=p;9 ?* P& \7 U' |4 f
for(i=2;i<=M;i++)
5 \7 {/ n' E/ R4 F7 J o0 y# n { s=(MONKEY *)malloc(sizeof(MONKEY));3 u0 \. _8 D' h% D* n
s->number=i;s->flag=1;* ]& k$ {" V& P( j
s->next=head; T; x; R, w6 c( H
p->next=s;p=p->next;2 e# J* A: L/ ?- m- F2 A* \/ q4 Z
}3 S, N, E, I F1 y" f* B% Y' [
p=head;! x8 o4 w' ]' u1 [
for(;;)
" N2 K- p! [, Z( U. s {if(p->flag==1)
6 m6 U d- T3 s* C( S& R count++;1 w/ A) \9 f& l* f
if(count==N)' S G3 g q/ C
{p->flag=0;
: f; L7 g d+ B. l count=0; C$ M& W3 n; h0 A
sum++;}) J# l/ T, P# p* \# \3 F
if(sum==M-1)& ~: W# t3 P# V# k
break;% x* Y3 F$ X+ p" @" C
p=p->next;
! g' c1 b- D' N } T+ p/ i& E N6 j2 I
p=) J* x/ r1 O; b; @% o
head;
5 l' }4 C% N$ I7 Y1 C for(i=1;i<=M;i++)4 c/ q% Y F: { G! g
{ if(p->flag==1)8 p/ v# s: O6 p# T" @, F3 l
printf("\t%d",p->number);5 g" K& J8 ?6 d: K1 S1 h, `- g, t
p=p->next;4 J) B/ N/ o* r! w9 Q
}
, g5 D( g: B0 _9 B3 E; U' z7 c+ ?( U% b: l% Y& j" H( K
1 m' K3 L7 P+ v% L7 }( B0 j% y. |0 G' _$ n8 O9 b# S& l' t
}
! s+ ^- i; M) `" Q! W$ P s8 d" T第二种方法:数组
% t! i; ]& v0 S7 g#include<stdio.h>
+ c5 P/ Z# W6 l3 n$ s8 F( X#define M 8
* ]$ e" K' L- {& L2 ]struct monkey
$ P3 m( X; J* E: d9 N3 b{int number;
; P+ H( ~1 z) W8 S5 iint nextp;8 u6 ?( b& l8 ~+ H; y
}link[M+1];4 A9 p- a/ D/ i) B
+ D6 M2 ^/ I) K7 R
void main()
+ ?4 z# }" u5 J# w. T q7 q) M' ~% w{int i,count,h;4 e6 L; k. Q( p6 N6 A5 C
for(i=1;i<=M;i++)) C7 o. _7 Y6 e# L, R; A8 y
{ if(i==M)
0 A7 }) s8 V2 Y: C9 J! l+ H9 s. o link[i].nextp=1;
+ {. {, b+ ]) }. Y G" P- a else- q0 l! v4 ^) L$ Z. O: G
link[i].nextp=i+1;( [* W* S$ `5 |
link[i].number=i;/ s+ ~9 O+ I1 a. t; d5 Q
}
, G- r2 ^0 Y: g( L( c0 jprintf("\n");9 v. w* n8 ^$ |$ s# i& n- C0 @
count=0; P0 u: \' ^- Y6 v$ ^
h=M;
, L4 Y" M5 o1 I/ L4 [$ Lprintf("依次退出的猴子: \n");
5 u; T0 L& J4 Lwhile(count<M-1)
4 m, ~, T2 r: h6 c+ u% v7 X{i=0;
! ]. a0 R' q \3 y9 \while(i!=3)
& W3 D* @$ e4 F$ w3 m' M{ h=link[h].nextp;9 ?8 T4 ]7 z# x" ~* g. t' f- r. \: H
if(link[h].number)0 Z/ \; |4 s, y6 p* z* M5 y
i++;}( [( F- I" ~# G: B
6 s+ l. L- \2 c4 a# Jprintf("%4d",link[h].number);
, S. d8 n! B) I8 r \- mlink[h].number=0;9 i: L& }( S, g, e
count++;% D4 O" P3 B7 L3 T1 f8 h% \. X
}
2 p8 n! `7 x4 }2 Z
4 B% k) A, c5 N1 cprintf("\n大王是:");
: W; T7 K: L2 M! }. V for(i=1;i<=M;i++)
/ f4 I+ H1 W; G! [8 b3 { if(link[i].number)
: m! x/ _$ n) a; q- M; l9 ? printf("%3d\n",link[i].number);$ S3 [% U* P5 d8 {
+ q- C. z9 F/ s Y( d2 V+ w
9 `) D6 b. r& J
}
! P3 A6 \; C! B; m) _( ~/ T2 ]4 [第三种是普通方法for循环
; s W! ? {) g4 Y#include<stdio.h>$ V9 _5 H4 r# {; R4 c( w& b. G
void main()5 T% t7 K# d; H! g" a. Z
{ int i,k,m,n,num[50],q,*p;2 q8 ]- b4 \( a8 h$ l. t
clrscr();7 m8 y' E' }7 i% J* I0 H
printf("input number of person: n=");" P9 g2 j; {: D" N/ n' [; K
scanf("%d",&n); n) w, Y. I% z0 i. x" k2 s
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 W) G9 U9 I1 u' S, j5 w T scanf("%d",&q);
R4 O6 ^9 }1 X+ i4 R; h p=num;! \/ d @2 q% X4 e8 {
for(i=0;i<n;i++)
* R9 b; k9 ~* l. L2 n3 L *(p+i)=i+1;
/ G* I: I) S* }) I3 E i=0;
$ a$ Y- N0 o* W+ U8 u k=0;. I/ }/ [4 q/ ?6 `
m=0;
4 ?9 c& W/ y% v" y while(m<n-1)
9 x6 x- h9 u, h( X {if(*(p+i)!=0) k++;
' q+ r1 g, i2 n# O0 s* d if(k==q)
" o" L- }! U c5 c- X7 ? { *(p+i)=0;
) J2 N: y T0 d" T" D k=0;& I+ T! e q9 y1 a$ U: B% j+ V6 q
m++;/ e0 F- C" D2 ~ r
}
5 {0 R* X: {; y* s( ^9 W- v3 A i++;! @" s, q2 @ u# A% W
if(i==n)i=0;
) E, g# U- v0 D- r }
# P1 y: ]- E4 e) C; U2 a$ Y while(*p==0)p++;. P; C/ `2 Z, r1 C/ _7 \, ~
printf("The last one is NO:%d\n",*p);: x2 J% Z: t) |8 N7 ^2 x
getch();
' X# _. T7 o% B: q+ `! p% p. y- u0 C \1 G/ R5 H% `, F
} |
|