|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!; `, @/ k0 T2 J$ A# n
这几天我在忙着编一个问题,我用了一种方法编出来!$ b9 }5 n( ~) t" Y' Z
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
; m5 i/ k" |7 B9 Y$ x注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 $ u8 M+ j( L2 Q, \* s
, I* A& Y! @9 f% O y' f
& |; M2 J# ]$ C- P, @1 ^: N& }
题目- ]7 S8 U% V& p. T/ c+ ?
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
- |, `/ P$ v1 Q0 Y0 a第一种方法:利用循环链表
/ C4 W" i4 k% h0 ]9 g7 x D#include<stdio.h>
6 t0 L! I' c* {#include<malloc.h>$ D# d$ G, ?' @. b
#define M 8 //共有8只猴子' w6 \1 g/ A4 W( ]! Z
#define N 3 //数到3只时退出第三只
9 ]. Q) @" k+ x# y. V/ f8 n# _typedef struct monkey- o/ ?. h* n& _! e1 O6 n
{int number;
4 B/ u4 S& B. e* [int flag;
8 o) I* N: `) v7 Ostruct monkey* next;
- b: `) \) v% i& I5 H) f}MONKEY;$ w) m {4 v' a) j9 L
main()
' m! [ G5 J4 m- t& m, B- B- r{ MONKEY *head=NULL,*p,*s;8 r* t5 `" m0 R* O7 C
int i,sum=0,count=0;
+ U7 B% k2 m6 |' K1 L clrscr(); //清屏 n7 c5 b4 ]% N, ]4 p, @5 c
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
1 `- L- ]8 O4 t( q1 e p->number=1;p->flag=1;& J8 O# o9 S4 [" R4 l; T
p->next=head;
+ m; w u8 M/ |, d7 Z head=p;" Z7 i) t0 a! f/ N* @ q- g/ p) _4 S
for(i=2;i<=M;i++)
9 h4 ?) n) Z% [. }( P { s=(MONKEY *)malloc(sizeof(MONKEY));+ E1 F; h4 s- I0 k* `# z
s->number=i;s->flag=1;
5 [) m7 N& y. J, n0 S- K s->next=head;
: p5 X. @( m2 O+ _" h- e p->next=s;p=p->next;
! c9 b2 u! m5 n' e8 N }
% n1 N1 [2 [7 T" L p=head;1 _- p1 }! b% @2 @: A) x
for(;;)
( A# t- H" n" l# x5 [# R {if(p->flag==1)
& o/ i/ @9 ]% ]8 ~ count++;
! V' \! U5 m& D0 r- X( |' `3 n; J5 Z, F if(count==N)
* s# W* N4 I# a ?; R! } {p->flag=0;
) Z: X7 Y5 u1 \; W' L7 a: y6 _. } count=0;
$ n6 i: h1 A$ T! P sum++;}
* s2 X E0 m: Q2 _$ n5 v, u if(sum==M-1); t4 {" Z9 G. L2 _9 e- @2 l$ ?
break;
0 _2 U% \& B$ y# m8 k- q ] p=p->next;3 f6 U( s& F3 k" m% G+ l+ K J
}
2 [* O+ k# j& v' f" x c p=
e5 x Y- _- }. a) a P, [; G head;
& S- H1 x( G5 k2 K5 @- H for(i=1;i<=M;i++)
5 x4 Y9 ~# d A \2 B { if(p->flag==1)5 ^8 U+ y) s m, s% S+ r, o
printf("\t%d",p->number);
5 e y+ n; U x' E6 Y6 x p=p->next;
, R: T+ t) ?$ M s& M3 C- A }
2 [ I1 R4 }# J! b7 k! _, Z5 }
. Y% ~9 F4 e. i7 Y) S( C' h% a) A n/ ^
* v! y, @" m' ?1 U3 f' M9 q" Z}
% |3 W) Z( y5 Z1 L3 i* X$ o' A第二种方法:数组
/ u! j5 E$ `9 }( _1 z9 Y4 U2 ?#include<stdio.h>, k6 q- y8 l4 [, E: n% s
#define M 8
" ?1 `& Y8 S. p6 U3 x. Mstruct monkey
& U2 q; ]. N: H& `" J& C{int number; t6 ?7 n: }! i% \: g
int nextp;; i: s8 @$ |5 V5 B% M. ?* w) k; v$ ^6 R
}link[M+1];% A# k5 x6 L( t$ t' F4 N) i
/ [4 v# z3 o% M6 S; ?
void main()
# Z, A9 J0 m/ h- O: |{int i,count,h;
& R4 \( i2 u! T% C4 Z% Qfor(i=1;i<=M;i++)3 P" G( o, R/ w! v4 w
{ if(i==M)% p7 f2 {5 V# x
link[i].nextp=1;
% v) N X, g" `- V5 ? else& @( ^7 V4 H1 X9 H/ G/ j9 \
link[i].nextp=i+1;
9 H$ k' ?: s) A- ?/ E# o# @" m5 i link[i].number=i;
0 J1 }2 G W" B}8 }( {1 h5 b/ H% f" I; I
printf("\n");
: H' I! B& i5 D0 D1 {count=0;
' Q. M4 ~# S5 F; K Lh=M;4 J; v- A- r3 G i: K
printf("依次退出的猴子: \n");; z5 c, i: J2 `! C/ Q6 b
while(count<M-1)% n* u+ J) Q/ N+ Q
{i=0;
" k, [5 x" ]) N4 O" Xwhile(i!=3)
) i% J; r S4 t{ h=link[h].nextp;
- }) `% j* O9 C if(link[h].number)8 ]7 J4 [, I) m
i++;}
. J( m2 |3 Z5 N7 M o+ `. [
9 R8 \! R% b& V3 Nprintf("%4d",link[h].number);# u" G0 j8 G8 ?8 I5 _+ f1 S
link[h].number=0;8 v3 a7 y+ I: Y- V( ]
count++;( W( V$ _' _ E" o, R
}! ?7 K' S" ~: y0 t) ?, I8 b5 k" S" ?: S
8 f- p& _0 j8 C( c
printf("\n大王是:");
, w/ ~9 v& c1 s1 W* m for(i=1;i<=M;i++)
5 t G. }' i& t" y% c) C! ~2 M if(link[i].number)' o1 T+ c' w& v4 C, A- C
printf("%3d\n",link[i].number);4 p7 r) I1 ?" H
4 z4 i7 Y# E" t1 G9 u$ ~
. A5 v7 U5 D# l( x5 S+ b" K. Z/ s& e} . R A4 ~" T" U* _3 q
第三种是普通方法for循环* G. G7 D# e9 c7 `
#include<stdio.h>9 h) I" ^; e p0 E
void main()
( x) H* n7 q) x( N. O: s{ int i,k,m,n,num[50],q,*p;) h- }' v/ m3 S" i! I% @
clrscr();7 H' m( b8 E: C
printf("input number of person: n=");/ _: l" q1 w d9 p* u9 A
scanf("%d",&n);/ r8 |* J4 F! |; K! ?6 Q0 x/ M3 j
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 U4 L: C+ G. t) _. g" H5 _. v
scanf("%d",&q);
5 I& V; |" w" k- j6 } p=num;
" c l5 H4 ^ B for(i=0;i<n;i++)
$ U4 M3 p8 w* c- C+ `8 ] K3 D *(p+i)=i+1;
/ U6 D4 c6 b& h+ V- Z1 P i=0;9 X9 u8 ?. m s( t
k=0;+ \! a% }: c' D& i5 N2 I
m=0;
; P8 ]0 L* k+ `% C, X& y7 M& ^" e6 g while(m<n-1)5 Z! I4 Z$ B& }/ m y
{if(*(p+i)!=0) k++;" `) \( I6 I; x! L7 G# K( [& H: p' `2 s
if(k==q)
+ m# }' T! X, n, K. T1 A' ]$ K5 W D& L6 x { *(p+i)=0;& F: b; [1 _! c. \" t" ?* `
k=0;
! M7 z! G2 Q; l/ _ m++;
" a+ c2 F' q+ F2 H& s" ] }
( M! ]; q% t; G7 {# b) J i++;
) U* i+ x8 t$ E) o f if(i==n)i=0;
& f; F" U$ D6 }. b9 v }
0 K$ W# V. x5 O while(*p==0)p++;7 k; U" P! a0 K9 n, N' Z; W' |/ X
printf("The last one is NO:%d\n",*p);
/ A. ~$ `, O0 I+ J) g* }" L getch();+ a3 ]( V1 U; j, w: w
' a- J5 Z% J; g# ]& B
} |
|