|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! f6 q4 ]+ x& J1 k( G3 P
这几天我在忙着编一个问题,我用了一种方法编出来!
5 e0 X$ s; [! x4 l3 ?2 }8 D6 a但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!/ ~7 y; t z0 s9 Y0 r+ A& ], |
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ! w3 `( n( h' x/ t
8 H4 L; q7 }) G9 G# z- h+ r6 G' G
$ D% o2 Q J! N4 Z, F
题目$ U4 v3 S$ P. d5 h# L4 R& z& d
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
H5 C" p( x. G" }6 w" |第一种方法:利用循环链表
8 z- x5 c+ s$ T, h2 Z3 O# C#include<stdio.h>2 o" c" Q& ], g+ |$ b' V9 ]
#include<malloc.h>1 i: X. g( v; b }; i+ V+ P
#define M 8 //共有8只猴子& _1 I$ c' E9 z- U* [
#define N 3 //数到3只时退出第三只* d1 ^5 a# ^3 a: h3 l
typedef struct monkey
4 L$ y) t: E; u+ O$ s0 W4 B{int number;* d7 d* Q" p" U. v) j. p
int flag;
. x5 w. P4 A0 N8 u" bstruct monkey* next;
2 h7 P, {1 J& O% ^9 F}MONKEY;
: G1 v5 h- ~5 R' Emain(): u( S1 D: z" q' U0 T
{ MONKEY *head=NULL,*p,*s;
5 `+ F" c; q2 v8 i2 C" W y int i,sum=0,count=0;+ _2 x+ a. s+ E8 N' w; u6 Z; K4 J# B
clrscr(); //清屏
: y. y# Y4 U# c- {; ^- \. m p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存3 B6 R- m6 g% d3 \" q$ M
p->number=1;p->flag=1;0 G( K0 r. f, b& a U( o" b
p->next=head;- q. A0 U0 A" k; U6 s
head=p;9 ~- a2 e d4 z& I% M- {/ f
for(i=2;i<=M;i++)
5 F$ B* f) f9 G6 v3 ~9 N { s=(MONKEY *)malloc(sizeof(MONKEY));
0 p5 t8 \' O) {" R) ?5 U: _ s->number=i;s->flag=1;
9 S6 J$ B- {# |/ m s->next=head; |) T. B5 R2 D
p->next=s;p=p->next;; E- M- [7 A# [. g' ]
}
) h+ W$ F# l+ E' v p=head;) i- D; q2 c! _- ^6 s% W! v3 _6 i
for(;;)) {, N! H$ r% [: B* k# o" f8 a
{if(p->flag==1): i1 R$ ~& A1 S3 u0 g
count++;& p; f. m) I& u; T; d, R" p; l7 y
if(count==N)- x+ Y' W k( R) j& W4 W; f
{p->flag=0;# U. J! v5 ~/ `9 Q! X( t
count=0;
3 s. s% T, `. x' d2 J p ^: f4 s sum++;}! {/ e K2 n& t% |6 \" j; f! Y
if(sum==M-1)/ G) O; L w, s. D" {
break;
9 l( o k$ r8 ~( s- r) _; C p=p->next;4 F# q, S3 R6 i; R
}
( e; f( O* f- C" ~ x p=
' z9 G/ H, N( i" W* J8 B0 i head;
0 i# v C9 S& q* M for(i=1;i<=M;i++)
2 I3 y3 G5 {3 E1 m1 Y+ l7 c { if(p->flag==1)
4 g' W0 W& |0 a printf("\t%d",p->number);
6 N; y2 I$ _% x p=p->next;
' S& `0 c8 L Z) Z }) y$ h+ @1 q7 F. d: R; D) `1 r5 Q0 S
$ d2 M$ h6 P$ U/ T5 V6 [$ v* Y7 P9 G3 Q0 _5 O4 }: ] T0 G' ~
+ {! \# Q+ x/ R: R
} 7 b* S. W( ^$ k+ `( W
第二种方法:数组
# A; q# S8 l+ ~7 N#include<stdio.h>
?. n: w/ b# ^" S1 d$ s, L#define M 8
% D- K5 F8 F3 p* [struct monkey
% D/ b- r' d( [- G8 S5 Y# \{int number;3 [8 y5 A8 r& D7 Y) s: w, j. I
int nextp;
0 y) r0 ]% B3 g" M' U5 t}link[M+1];
# F& l' S, @$ O( ]. x: w$ y2 K2 N! g: g7 D7 m$ m( s5 {
void main()
5 j C( Z9 s& q. t" }{int i,count,h;; z$ j3 }" V$ F# q1 c
for(i=1;i<=M;i++)4 c1 M1 A* h6 ]9 A% ?7 a( x& ]
{ if(i==M)
. }( H0 c: O/ U2 j7 I5 G0 @) N link[i].nextp=1;
% c, F7 f- W, _1 I8 w2 j else% f- [# i+ n: m$ Z5 q" U
link[i].nextp=i+1;
. O' |& d1 `# z0 M& ]- L link[i].number=i;
# D0 G% _. i: W/ b# L* t# _ J}0 m$ x: @6 r, P @( v6 g
printf("\n"); ^8 C/ c8 r: }, \ d7 L
count=0;
8 \, w5 s5 i3 ?; j0 e8 Gh=M;$ M% D& x2 V5 b; v2 h0 T
printf("依次退出的猴子: \n");% L! W$ v% A1 X" n+ p
while(count<M-1)# V( \& H; F4 s0 y% G( T8 l
{i=0;
" s, J- _) {; y, U# I. S7 }0 D) @while(i!=3)
\3 f4 h( i% c. e1 V. A$ |{ h=link[h].nextp;/ b6 P q& |! f- \8 d* H
if(link[h].number)" @6 `& A: s. ]# b L
i++;}, t& k1 Y" d! j4 B* S9 n9 E) h
1 Z7 E9 \6 i2 k( M' n, X2 l2 ?: V
printf("%4d",link[h].number);* Y1 U) Q# t) ]; P9 {+ C- U
link[h].number=0;- P2 b j$ u/ }7 o/ u# { K$ w
count++;
' W- E+ ^) P5 k5 J" g}$ m4 }1 p: a5 v% T4 r
5 D2 M8 v# {3 H
printf("\n大王是:");
( ?) A1 D" e: z: X- ?$ r& P for(i=1;i<=M;i++)4 Z# p7 N4 G( O2 D9 A! X% L8 ?
if(link[i].number); `& e3 e" ~. K7 k5 h, I @
printf("%3d\n",link[i].number);
# u* J x W0 h( C2 C+ @& b# V4 h, F' c- T% h8 `5 [ J
$ N& ], G9 g) G% j2 l# R} 9 {1 X) [9 T: Q& l, A+ @
第三种是普通方法for循环
0 A; E0 ]$ e; z) ~" z. \#include<stdio.h>
' v3 `6 r# \- a2 w% m, t$ _void main()
1 ~' N F5 M, B# z3 e* w. I{ int i,k,m,n,num[50],q,*p;! F7 S7 Z. r$ ~
clrscr();7 O! I D4 o, @& a
printf("input number of person: n=");1 J9 p# P- h4 _. P' `6 v! Y
scanf("%d",&n);$ d" A; F- z( ~7 j
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
) Y6 m9 e* Z3 R4 C: A0 H* n scanf("%d",&q);
% s; N9 I0 \4 ~ u V p=num;& P9 S# q: g* O/ \; j
for(i=0;i<n;i++)
7 t; r$ r. p' C5 C9 p6 ? *(p+i)=i+1;
5 n' t) i5 ?% y i=0;
$ D6 j3 C8 ~) j k=0;
# `' ^" C0 }; q* t m=0;" ^4 W# {0 `! b
while(m<n-1)9 v1 f7 p. g3 {8 f
{if(*(p+i)!=0) k++;) I. x& K. H5 w" P A0 Z: c
if(k==q)7 Q+ ^6 [% Y, U4 \
{ *(p+i)=0;5 ?7 R0 d2 P8 z/ x2 g
k=0;
' q- U a6 Z% Q' x2 q m++;* }( b8 P- t, Z% o% [' R
}
{7 x" G. ~5 m/ H0 [$ K i++;6 m1 q0 Q+ W5 H/ ^+ D8 C+ q( S* c
if(i==n)i=0;
' L- b$ w# ` z) f }. }/ k6 w3 n8 h N6 A; l
while(*p==0)p++;$ R: I% F$ T( g3 j
printf("The last one is NO:%d\n",*p);
4 W' B7 m8 s1 g4 c% R getch();
( o3 x" K/ j2 |: ], y& d8 h& Y' c: A5 v" X) _) R% o) M
} |
|