|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
1 j; O7 B/ B" a这几天我在忙着编一个问题,我用了一种方法编出来!
' s+ X$ p8 w. c+ k但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!4 s9 S% b+ V6 \8 R5 @ u q$ \
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 : j) I& b* w0 }
$ X5 H3 I- C2 T# t
2 y8 X% \1 ^# t0 T( ~" J1 d 题目6 I- b; H9 h6 T9 s }
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
. @; |- e: R% q/ o. T第一种方法:利用循环链表
0 W& D- V2 f+ C0 ?8 t0 z' a#include<stdio.h>6 T9 b1 r0 [7 q" U, q8 [ |+ q) Z
#include<malloc.h># W6 _5 v$ ]/ C% S H) v
#define M 8 //共有8只猴子, B2 l3 v9 |0 e+ a
#define N 3 //数到3只时退出第三只
# Q4 x3 ]. |1 Ttypedef struct monkey; [* ]7 Y, ~3 l9 J% O
{int number;) l$ A& ^/ K+ K) d: B
int flag;6 K- S H# ?0 m
struct monkey* next;
0 K% Z6 ?$ P+ T2 w. T* m5 Q' v7 u}MONKEY;4 f& E5 b* ~, E( d% m! V( X- _
main()
( C& l5 Q' W6 W{ MONKEY *head=NULL,*p,*s;1 i. b* k3 Z1 U, \6 F Q# t# A" p
int i,sum=0,count=0;
d( ?6 \* A# G3 K clrscr(); //清屏
/ ?0 O! Z: x% U" r1 u p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 q+ O2 u- X; W p->number=1;p->flag=1;2 i9 \! L" p) m/ `7 d+ [. l8 H
p->next=head;
+ x' N, y' G6 E; {4 |/ E6 G head=p;! T I% W7 I- @$ @. t/ b
for(i=2;i<=M;i++)
3 ?! c; ~% e, p) x* E { s=(MONKEY *)malloc(sizeof(MONKEY));
5 L. `8 g" l2 A$ X s->number=i;s->flag=1;
6 `" w Y6 b# o2 g: o s->next=head;9 ]: T9 @% u$ c5 J; c
p->next=s;p=p->next;
/ i+ j- k Y0 f+ P }! F; J5 w) J- r- \: V5 \$ k) o- e
p=head;; z" D3 y# q; E" F
for(;;)' z* [. l: N# T, M. l* a
{if(p->flag==1); y0 R8 ]5 _/ q7 Q" A( z
count++;
0 d+ Y1 `( z' @ if(count==N)
, N' w* l9 P( I9 T7 E {p->flag=0;
! l5 G8 b" o8 v4 p count=0;
3 {) m" Q( N: C8 k2 S% z5 ?- o sum++;}
' z w O0 S: ~9 x: X) `' L if(sum==M-1)
* ?* k* M8 Y+ V% j9 }# r break;
6 ?3 p& j3 J) g7 S p=p->next;
- w3 c9 B8 T! p; W }/ c D8 _8 _0 z3 F! x4 j
p=, y( f) Y# i! A# l: e
head;
5 j3 F* n4 V0 ]9 z8 Q: r/ v for(i=1;i<=M;i++)
2 J. G8 W- D" v! B; T( ]& P3 b/ p, t$ V { if(p->flag==1)+ X7 M! |- T7 s6 f1 D( N% [
printf("\t%d",p->number);
: l- g4 ^4 z7 o% Y* W$ w; | p=p->next;
9 Y) P6 {6 ]# }6 I$ ?, P }
6 ?# J3 ~, ~& ]% i7 X r1 ~0 _# a% m3 z4 C1 R3 n4 d
8 `6 q% v& v3 r# L3 L4 a! ^* F
4 r; W! k" k4 ]; S
} / G+ Y7 r8 g5 Q! J9 n- h5 A; h! |
第二种方法:数组
: f- ]7 h. W a0 m# B' Y#include<stdio.h>" M/ z" p+ O9 [' b3 d5 I$ y
#define M 8
% v! |0 p" p, P0 H7 qstruct monkey
9 G ~2 G" l1 v' f{int number;
# a) M _+ R1 P2 `0 x- j& F" q5 \int nextp;8 @3 N- p8 j, g2 B' ?- @
}link[M+1];
J: P4 i2 }* B! L9 w- D# J
9 b$ u! v- D: r7 ?6 l+ H0 Zvoid main()5 _- r( y3 G/ m2 S. n2 \7 e- t
{int i,count,h;
0 c0 ?$ t k1 i' pfor(i=1;i<=M;i++)
4 t& @5 L+ C1 C( d- ~{ if(i==M)
; z8 Y( b- h k link[i].nextp=1;3 k2 ?% ?! W: E8 o: |- Q
else
6 r; f& v. X4 A6 B4 ]& v link[i].nextp=i+1;7 D$ \2 Q o3 ~: o6 V
link[i].number=i;
4 x4 y& s a! L}/ A$ B9 R9 W( ]2 K
printf("\n");
- u( f& v+ S$ |count=0;
/ ^5 H5 K) l. `' u& th=M;
{1 |+ }" |% ?" ]2 d/ {printf("依次退出的猴子: \n");
4 ~6 I. r/ [: y- M6 K0 @while(count<M-1)* F" d: T) r6 @) @- u1 s
{i=0;- w; L- M; M9 y! @! I! j! a
while(i!=3)
) p! o3 N. X, d7 I6 }9 `% S* Q/ P{ h=link[h].nextp;
~; ~! a7 P7 m if(link[h].number)
; z# r% `3 `; K i++;}, L- A( M+ O0 d: W$ y
& b9 p# l3 _5 }
printf("%4d",link[h].number);- ? Y9 q) W3 r/ ?* G- n
link[h].number=0;& z7 \+ c& r5 q- n4 w* }
count++;7 p, D/ E q5 k/ f
}. s# E8 a, U4 s! I3 c7 N; _
' [' |* n6 W9 ~: D b' q
printf("\n大王是:");- d3 X3 L; [; k6 c9 Q
for(i=1;i<=M;i++)
( Q, b7 E& r/ J( O if(link[i].number)
/ s- b E" i( a3 ?1 V5 [ printf("%3d\n",link[i].number);
, r" z4 ^6 i+ q& h7 |0 S1 \8 ~5 K/ e! n4 \' q+ m: O
) c( A4 D k0 w; t} c) V! i5 @ s! \) w) O
第三种是普通方法for循环$ I9 h2 Q3 Z" S* n+ Q, \- i& ^8 T
#include<stdio.h>1 f, q& A* H. ]. r) g
void main()( G8 e3 O. E8 n9 B
{ int i,k,m,n,num[50],q,*p;9 ?3 Q. T+ V! o2 s8 W3 ~% M
clrscr();
/ n, Z/ l8 x7 K; Q printf("input number of person: n=");
! Y; q4 t, V+ D$ W: M scanf("%d",&n);( W( ?/ I' u y5 q( V. e" J
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
0 y& f! d3 b+ d( A scanf("%d",&q);! r. i+ M9 V3 I5 ^* ~
p=num;1 b7 t( U: L2 e; W0 f1 e
for(i=0;i<n;i++)% L$ V5 q, c, s( C) d3 [
*(p+i)=i+1;4 r) h! ~, n9 b
i=0;, n0 o% h" _ O6 S! A+ t
k=0;
" F1 N( F9 j# N a3 W m=0;
" _) q7 T# h0 @! B( V) \3 ~% [ while(m<n-1)' ]: j9 q' s) g# f; J
{if(*(p+i)!=0) k++;& F+ E& o5 [1 I% j: ^0 l9 ~5 J0 u
if(k==q)
( ~4 b* Y/ _2 M# m( g1 r f$ V9 l { *(p+i)=0;
, ~# V; U8 h% u8 u v8 C k=0;
. j# I8 b/ S4 G m++;
- P. H9 s3 y0 [! R6 o6 i% | }
. L* r1 J: I; [% y1 K6 k9 \ i++;) i7 Q. j$ q5 Y1 Y" T
if(i==n)i=0;
; W: Y/ h$ d0 X/ h# {* h7 [ }
9 B/ |# K5 x( G0 ~+ j while(*p==0)p++;$ K( ~, C4 _9 E5 I: n0 u4 {, D
printf("The last one is NO:%d\n",*p);
& p4 r( p0 g6 a* e1 S getch();
2 v# T0 u. i4 i% \0 ~% M8 j$ c# ]% Q# Y% _5 F/ |1 S
} |
|