|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
. W2 u* O/ x: J/ U这几天我在忙着编一个问题,我用了一种方法编出来!4 Y, o) J+ I$ k1 w
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. ?) n: Q+ A: d1 r7 X
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( ~' b# D' r3 a6 d) ~) |4 {7 N! {! l* V$ E% }2 A
; g9 h7 m s. o2 I: V
题目
* o: ]% _ G. m山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
1 _1 r% j! _9 \- f9 v2 K第一种方法:利用循环链表
5 X4 V$ n) m% K y6 C#include<stdio.h>
3 S) ]$ d c B# S, a1 W# R0 l#include<malloc.h>
& s, n+ A; x0 t. X9 t) v#define M 8 //共有8只猴子
) L% c: H( _# {6 l u8 i#define N 3 //数到3只时退出第三只" g- j# r6 p# ~- u, B2 O& w; z
typedef struct monkey
) D! p; u9 ^# `0 \9 V{int number;
1 M' f1 S) B8 W4 Z8 h0 Q1 ]7 \int flag;) a! v, l' D G; }
struct monkey* next;
( @" J- L4 O$ O4 L; k4 t% v" R}MONKEY;3 N/ n9 x, X$ v7 u
main()
! V# z6 ]* y; J{ MONKEY *head=NULL,*p,*s;
: l. T$ |0 j+ L$ \" I0 r) b0 `5 l int i,sum=0,count=0;
" H- b* d1 |* t" h: K t2 O- j4 ? clrscr(); //清屏
( \( W8 _. o7 L& G; E p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存' Y9 H0 ]' W* f' @( W/ ?9 b3 q
p->number=1;p->flag=1;( C$ p! n; a% g+ r( q) S7 W S
p->next=head;
3 X* Z1 }4 q9 ~6 L! Q7 v head=p;5 b9 t( l; U- ]* i/ j
for(i=2;i<=M;i++)
" `" x6 R8 D( \2 Q { s=(MONKEY *)malloc(sizeof(MONKEY));2 w, B4 ?! _2 ~( N% J
s->number=i;s->flag=1;, ]8 _" d1 t1 i
s->next=head;
- Q( y' o2 a/ U9 h8 v p->next=s;p=p->next;: P) X. X4 B; g* p0 m0 S% A7 C% ?, h( j
}4 H: ~7 r X2 w; v$ d, _5 U' Q% T
p=head;
' A* u' [3 b3 c- @ for(;;)
# Q8 r& x- c0 H1 @5 l% D1 R {if(p->flag==1)
* W& S" z) z( o+ F( o* M. L: v count++;
& ~! I- V, `9 H' U* K& D if(count==N). i9 q# b' p; Y
{p->flag=0;
" q4 e) F" L' r. [6 n& i" P* w [ count=0;/ W8 v9 K) ~# w* H
sum++;}# L$ C: H+ V! t- Q3 O+ r/ K
if(sum==M-1)
- ?% g% x% f& G# h break;% b5 C0 f! p) L8 \
p=p->next;
, r& i5 f9 [1 n) c3 P }7 [% `# E }2 X% {
p=
, L$ `+ `( r. c, ` head;
* M" U7 d, p1 h5 u/ N for(i=1;i<=M;i++)
3 R1 X- o$ A+ U( B+ L { if(p->flag==1)
. K1 o/ c. j0 s printf("\t%d",p->number);9 h) @! q$ j+ A9 A4 K/ ?8 u
p=p->next;- O: z1 t) H, W
}
& K! r! [6 O5 g% S: k6 Z ^, S, ~4 |% O! y* h
+ L! e8 i7 a* h* ]% O6 {
. b. i2 Y* l* l& y+ P+ p
}
6 f9 z. U* x n# j# b5 d$ J第二种方法:数组1 H5 l9 [% S1 I
#include<stdio.h>5 m+ }( O. d& y3 Z: E6 Q
#define M 8
2 R) S$ z$ ]9 k4 Hstruct monkey
* T- E) p4 U5 A6 w. t l, L{int number;
- n/ L8 I5 }3 @- K' e! V1 W# Wint nextp;
9 g2 ~, ] H5 ^4 k) Z% ^: s0 e}link[M+1];
' G; ]* \ B* q S* G* ^5 ~6 k9 L; G% f1 {
void main()
3 q; x+ X& d$ H3 C0 g0 S# N9 u{int i,count,h;
9 b1 w" Y' A: S3 h, \" H$ Yfor(i=1;i<=M;i++)
4 J0 P4 z/ j: Z- e! _{ if(i==M)
6 `- m2 x. Q5 ^ link[i].nextp=1;! p% c: i4 S! [3 U( z& ]$ N
else
+ E* ^5 P: P4 j( I% N link[i].nextp=i+1;0 [) k" z$ q7 S6 |# L) @; r
link[i].number=i;- U6 C9 t* S/ I; x* {
}" s% T7 r/ |8 y; J H& M
printf("\n");
0 Q2 k& K/ w1 Acount=0;
0 i2 j6 W0 r. ]* w" dh=M;9 x- ?2 z7 a1 H! Y
printf("依次退出的猴子: \n");2 s/ s, _! X+ G5 k$ X# l- I* T9 Y$ `
while(count<M-1)
7 H4 ^/ e+ I% a. l) p2 I6 p{i=0;
& F- P5 |: M( B: }4 mwhile(i!=3). W$ H( z' Q, K. p( F
{ h=link[h].nextp;
, X6 A3 a! l- M if(link[h].number)
$ d: y( x- i+ n0 U1 g9 p8 M) H% B i++;}- D7 ?6 \) i/ ^- G1 e, F4 d
0 Z" M: P% a8 s8 f6 `printf("%4d",link[h].number);% d! S+ r+ c6 I$ v/ P$ ~2 q
link[h].number=0;
* }4 S) R, Q; Kcount++;
1 d/ u) @) Y$ P2 v1 Y}
0 \4 D* O/ K/ S8 t" s. }
8 G; q- W4 H0 w8 Vprintf("\n大王是:");
1 N, d$ Q9 ]% Y1 W* y* F for(i=1;i<=M;i++)0 ~9 B2 R. \! |" h6 a
if(link[i].number)
# h: o3 S6 T9 i1 C* q printf("%3d\n",link[i].number);
" b% G; R/ g! v4 U5 D6 G# y7 F0 O, J E4 I9 u, _! J3 ^& u
# d6 T2 z7 \3 @3 l4 N1 k- U
} * ]; J ^( a# X: J9 U/ J: b
第三种是普通方法for循环
# U n% `3 D3 ]5 D/ [4 N: c#include<stdio.h>: Z: x1 Q# o- m2 k
void main()
4 C0 P$ V, `4 J) R, N" s4 B' e{ int i,k,m,n,num[50],q,*p;
3 A2 i5 s9 g9 B0 v$ J2 n- u clrscr();
, S' _ p3 z' h+ W& x! F printf("input number of person: n=");) V6 d$ R! o* f
scanf("%d",&n);
I! i7 H3 g! U f3 k6 G4 x: i! x$ eprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
: t" ^% A5 d. w! J- d* x) y scanf("%d",&q);3 w% B0 j: ^1 [/ `7 P
p=num;! ` x; X" {0 Q0 J3 O- H% G( h
for(i=0;i<n;i++)8 L" R7 P. J! C* y+ u
*(p+i)=i+1;
) T1 I5 q8 E# [ i=0;& c" R0 N9 B2 a2 x B$ Y
k=0;
/ n+ ^4 L6 l# c! B m=0;
/ }/ d: \2 i y/ j while(m<n-1)
4 t( y: \0 H, b+ R' ~! y8 \ {if(*(p+i)!=0) k++;
/ P$ |: D6 k6 F0 K/ Y if(k==q)' {" v, U/ `# Z3 V* `0 p. T
{ *(p+i)=0;/ j! G% B% Z' P; c8 V
k=0;
% m3 m1 A2 f1 Z( u- x m++;7 M& ?- s& W. d! t
}
) c' t, ^3 Z5 T4 m5 I0 X i++;
\& u5 J' T' Y+ { if(i==n)i=0;/ {! f1 f" u, X
}
/ k; n, L4 B' I5 N* `+ s while(*p==0)p++;
% ?& T. ]* g/ ~) F$ I printf("The last one is NO:%d\n",*p);
' I+ {* }) ^7 b3 z% {: d getch();2 x! _- y$ y6 @# i+ O8 \/ D- j+ {. t
! L% D0 [! `% Y1 P1 N" u} |
|