|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
) a/ _$ I6 u2 t这几天我在忙着编一个问题,我用了一种方法编出来!
. M+ g* S8 c X( q0 v I1 h/ T; w' V: \但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- k1 i5 T/ Q! F( }注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 6 g: Z% _ f- a: t4 P- J
* o& Y* n3 d- y- X, R0 F$ u9 f6 X Z+ G! a' B- x9 n0 L
题目
5 h& Y( T. v7 o: j- T S山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。 o# } V. ?2 Q; J9 t
第一种方法:利用循环链表
! O# h3 ~% a3 R# Q P#include<stdio.h>$ V+ N$ j/ n o3 t# n& F
#include<malloc.h>
; X7 t& v, A- ]% S! i9 u#define M 8 //共有8只猴子' V1 C( E, K( y2 Q \* b8 P* ~
#define N 3 //数到3只时退出第三只1 Q0 e& D9 h0 {: T$ L( M" J1 v. a, g
typedef struct monkey
" W" N* ^: h) W1 P$ x* U{int number;' _' D0 Y4 A' y* x; x
int flag;
: H4 O) @9 _5 J) Ustruct monkey* next;
R; O3 [3 o5 I/ r}MONKEY;+ x2 f; q k5 A2 I& P
main()
0 \4 Q+ S% N- I; z* S{ MONKEY *head=NULL,*p,*s;
: n. M7 `* {6 X/ v+ f8 K2 N: _ int i,sum=0,count=0;
/ m' E; ]/ G/ j& V) J4 B clrscr(); //清屏, C- D4 z& {/ `1 I, K
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存+ a- {7 j7 P, H! E
p->number=1;p->flag=1;# R% n8 h( K1 [
p->next=head;
$ H' e C- j* ]% S) }# v. R6 _ head=p;
6 d) Y( \" Z2 N4 D0 U for(i=2;i<=M;i++)& _) R8 H0 Y& ?0 d( H2 f( J
{ s=(MONKEY *)malloc(sizeof(MONKEY));
. R' \ p( Q V' D6 N, X. X/ L s->number=i;s->flag=1; I1 R1 I1 x; z M, B5 U
s->next=head;
7 G* d6 m* w( s' j* h p->next=s;p=p->next;; h6 q j) p& I- V, o3 _ G
}# H2 X% b- }! d5 v
p=head;5 {" H: G4 t" H' f' g& n
for(;;) n/ ]: u$ a4 y" n& Z( _
{if(p->flag==1)
. U6 [' @; D$ |/ i1 K! L+ c count++;/ J, M0 [6 [) w/ V' J
if(count==N)
% E/ }! L: d4 r8 c+ l/ b {p->flag=0;
1 s4 i; \' i; i- U count=0;2 L% [- v3 D/ H( k' X; s/ `2 T* i
sum++;}
: S% |2 Q6 r( f if(sum==M-1)/ y; F7 l- B' Z7 G2 Q, z0 R" |
break;! u* I% b; F9 J8 l. H
p=p->next;
4 ^2 J# J# s6 J0 z! k }
! b; r% y) ?) t+ D' C) O2 h3 g p=
. |$ H, O+ v, @8 R1 C8 W head;+ K# B% f P6 A# ?" b3 X4 b
for(i=1;i<=M;i++)" b ^1 v' M6 a
{ if(p->flag==1)
' F5 l- I/ m! S7 v Z' N( `* x9 W printf("\t%d",p->number);
" z. L- H/ ~# w" h7 R' e p=p->next;
- z, V5 Y- y- Y }: u* s# M9 H! x5 ~6 k! @
/ z( T' ]6 n! E/ c, j' e4 X
- B( ~' @( p! X9 }! {2 c1 D
' [% G8 ^% D' v) ]2 \4 @- B& D0 s} # x3 k7 e! i6 p6 N! \
第二种方法:数组
) h, A( c7 [4 U#include<stdio.h>; y( S& X1 K0 ?; f
#define M 8
) k" U' @/ Q# U' q4 f: N4 l7 Fstruct monkey ~( y8 M& n: @* ~1 `
{int number;/ X) K! h7 d! v; v& L4 c
int nextp;
- @- Z3 s L% D; K- ?8 Q* O2 r}link[M+1];/ \. F$ y& O) r" l* V8 R( D
2 ^7 U9 u& P5 }! ], }
void main()
( Q9 h7 w8 N c" Q1 c{int i,count,h;6 b4 ]' ~, A ]# y/ u3 I7 E7 j/ W
for(i=1;i<=M;i++)
. X( d' q; S. W _{ if(i==M)
, v9 L7 L. k: v3 D0 A- \0 @, ?1 T link[i].nextp=1;! I! a( T; z G& U3 f. g. O
else
) C! |; K9 g4 p( J9 k link[i].nextp=i+1;$ U, j& [* c F
link[i].number=i;. g( R7 z( D. Z$ i6 W: z2 V0 V
}* b* K8 n2 Y$ U9 Z7 c7 i2 o
printf("\n");/ [% ^5 b% j' L! X2 r7 W% @
count=0;" W6 @4 s1 o4 T' g7 J6 y, v. |
h=M;& x& ^$ j+ Q3 F5 s
printf("依次退出的猴子: \n");( B \" X2 [0 N) H8 |
while(count<M-1)! q% ?# j1 h! ~; x4 @3 J9 i
{i=0;
- i0 o* K! n6 swhile(i!=3)
& g8 X- `9 F/ U h" h{ h=link[h].nextp;
: k- G9 q1 E/ b0 s" d if(link[h].number)5 C7 O; B" I4 ^; h1 }- C
i++;}3 f* k1 E1 S; {6 p+ q
6 i; h+ k6 T" x5 ?- c; U' l4 ^printf("%4d",link[h].number);
* R& v; S* c" {link[h].number=0;
3 H. j0 l G2 o- U) fcount++;
% ^! f/ S' L- |* v& M# q}
" b* r2 @" M. [, Z# x# k' j! S/ {0 x+ a; o
printf("\n大王是:");. I$ p; ?0 {+ V9 F" }# U/ D
for(i=1;i<=M;i++)! S; M. N( N" ?4 T4 p0 [
if(link[i].number); |/ w/ Z( ^$ z" G" h% k
printf("%3d\n",link[i].number);* a9 J* {" I( Q7 |& ]
/ _" a1 ^8 l! {; L% J
) r' a3 k" I% V* c} # [. F- h, |/ N: c
第三种是普通方法for循环
2 {: Y& Z( H( T. a/ W3 l#include<stdio.h>
" B2 _1 d `; J4 Cvoid main()' G3 j0 O' C+ e% P5 Z1 @. B! J
{ int i,k,m,n,num[50],q,*p;- v" ]3 m( e: O# F& ^5 s$ L
clrscr();' ?) s% O" C1 J+ `
printf("input number of person: n=");
- a k( g3 I% V) g scanf("%d",&n);6 E% m K+ C; k! L1 L( I9 u3 z0 g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
& B% {4 F6 V8 E2 l' f scanf("%d",&q);
, k% d% t9 C/ e p=num;
7 Z3 Y' C7 A' V' M( X: a for(i=0;i<n;i++)& I) ~# U0 U ^& j `8 i/ g
*(p+i)=i+1;
5 M8 m- I( A: w4 b i=0;
" k' _$ p* x5 S" M. ^" o k=0;
: e7 c! M& J' p- c# v- y( T. F m=0;
! ]* n. C, h |+ }( Y8 Z& A while(m<n-1)
0 ^2 Z6 _: d" q# t( i {if(*(p+i)!=0) k++;! X1 w3 _3 t2 r5 z9 W4 f n
if(k==q)
8 r$ ]. ^6 f; K7 j9 {+ t+ l { *(p+i)=0;
4 q7 [3 C+ q' M1 X k=0;
+ U. d, A6 B9 s1 K4 c. J9 T" a m++;6 v8 L) V2 F( d
}7 n- V6 F" H: b. q9 ]' @
i++;4 P( O% v8 y. A8 x' l2 l5 P
if(i==n)i=0;
: h8 ^- m$ g. q4 @ C0 h* \6 w }* U9 l( |2 i( }- l9 U: o* |
while(*p==0)p++;. F* ^; D. R) S8 W
printf("The last one is NO:%d\n",*p);/ i7 Y% U. R. q5 Z- J
getch();8 K3 J; z$ d0 f: J* ^
* L# m6 A% I$ s1 C, `} |
|