|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 t8 h) y+ J$ {; n$ _这几天我在忙着编一个问题,我用了一种方法编出来!
/ ^3 x4 w% R' L ^( |0 n但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
% K' k9 X# Y& H J/ P1 q* {% P3 B注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 J+ `2 K- B' C" q* d
0 m0 z5 f8 J' ?) @: x2 g) U+ l) w4 m% _+ v
题目
8 I v# P" k( E* V/ R$ K: t; e0 _: y山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 l/ k8 m0 k$ g6 q' y5 w第一种方法:利用循环链表2 I8 i/ u Z; |- ?! l% r
#include<stdio.h>
- t) s, L9 H8 Q, Q5 k#include<malloc.h>" a) Y6 H+ l( u$ S- l
#define M 8 //共有8只猴子: P. F( G% q1 Q3 `% V) P. A, i0 K
#define N 3 //数到3只时退出第三只
9 X: d% D6 u. N; |; d/ v3 Otypedef struct monkey
, X" G+ B' C% p5 t2 @2 R3 L{int number;
( G" }* |* m J9 I& I; G0 [. `, eint flag;2 E$ L+ V& ^- e) Q y3 K! a
struct monkey* next;
8 o0 w) o$ {9 _3 A, F; D% i8 D7 w# M( ~}MONKEY;9 h9 R' K* ]- I3 f0 @8 i+ _
main()& z$ C5 m. n% v* k
{ MONKEY *head=NULL,*p,*s;8 ]. Z* U7 H" B
int i,sum=0,count=0;4 e6 ?9 T4 d0 i. G
clrscr(); //清屏
. R, U3 @& U f) Z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存' _* ~4 l$ _- Y; \1 G. n( \; s
p->number=1;p->flag=1;
; q0 ^; b9 _: o6 C p->next=head;6 \0 H. `1 v% U* j, I" D0 I8 v
head=p;+ B! H- G$ Y" Q( f0 w' ~
for(i=2;i<=M;i++)6 Z1 F! e7 w0 g/ U
{ s=(MONKEY *)malloc(sizeof(MONKEY));
" U8 [/ b2 Z7 c( k: M s->number=i;s->flag=1;
, n" a& j5 I. r) n4 Z. ` s->next=head;+ I! V6 c5 P6 G1 K R! V) a" @6 d( Y
p->next=s;p=p->next; c* ?( X# r; d# Z+ {
}
% `/ W% W0 i6 l& J! u p=head;
) G) i* T6 t7 `) G' _2 G. P% F for(;;)
( U' s4 w" b; P {if(p->flag==1)5 N- _3 s+ V- l1 u, G1 y, N
count++;! V E0 _0 N& D6 [* B5 F/ O! g6 d
if(count==N)
9 E$ L0 B: |8 z* F! f$ t {p->flag=0;
4 a* _+ l/ q/ e) V0 ~ count=0;
0 l: s4 n% n' I t sum++;}8 F' w2 S, f) l( X
if(sum==M-1)
) Q+ i- r( p. L4 L$ ?$ T# r break;& a( W- q" B9 V7 r% L/ ?9 D
p=p->next;
' Q i5 @* w0 ~" \# M9 E0 Z }
3 m% r5 L# p8 n' E, j p=
# h) a0 o2 w- G7 x head;6 r! u) l t; l5 D- P$ N
for(i=1;i<=M;i++)3 T& h% r0 R) z
{ if(p->flag==1)- j9 T5 `( t$ M. A" m/ q6 L
printf("\t%d",p->number);# P0 F# Q9 E. f' d
p=p->next;# N2 ?. B: w* X
} s( C7 a1 q' X6 j
6 A" X& F+ B8 ]8 o' f
P# k8 k; l* g% h# D' R
% y2 b, o0 l1 \ [% }}
4 `& _ i: I2 V$ I- X' I2 B/ _第二种方法:数组1 {7 [. a( @( R5 W, T/ e" R8 s) E
#include<stdio.h>
( _: b% W# |! m- n#define M 8
7 }) f" u; @) I1 ?8 j# i& Wstruct monkey
4 }0 M) ?5 X3 Q# p6 M" c9 o4 d/ f" E{int number;
% _3 F6 u5 L# G# y) x; Z# N# pint nextp;
' T0 f" S- {$ c0 { k2 @}link[M+1];
3 i1 l0 r" a) [# }. K% D
- D, A& a: D; h( Ivoid main()
. X3 e! n/ B; ^{int i,count,h;
) H1 t5 e2 N+ t. N8 R( A0 |for(i=1;i<=M;i++)
0 d# S! J/ M) d2 K8 u3 R{ if(i==M): U9 W0 s$ P7 u& {$ i+ f( x
link[i].nextp=1;
# O% C6 t' }$ s. y else
; c+ D: m- Q1 h6 D7 y! `1 t3 W link[i].nextp=i+1;
( L8 e5 u4 e1 \$ p9 o* S I' z link[i].number=i;* A6 e4 z4 G0 N( p
}
3 P% a2 C, i! K6 v/ ?printf("\n");9 K9 F) b* L4 j5 }: h+ n6 Y$ ~
count=0;
* ~( Q7 m6 N6 A# f! @h=M;0 Y! R6 N& l$ |6 q) @0 p# w
printf("依次退出的猴子: \n");! h; C8 K' C$ B
while(count<M-1)1 y' b9 C' [; m7 [9 l
{i=0;
J1 i- D# \" cwhile(i!=3)
+ L1 _1 d m7 \. g: Y- f) h- Y$ J{ h=link[h].nextp;% d9 D( D( l. U9 ^
if(link[h].number)
$ H1 j4 d. x' v/ K. [ i++;}
* ~3 [3 R5 j. K: M! k4 o1 A& ^, W0 q2 k! T' ^4 J
printf("%4d",link[h].number);
# Q. f# o% c0 e' l. Olink[h].number=0;
# q4 `$ c+ |( U+ [count++;
* _ }- k8 W4 z( N4 t}8 `! e! z% ~5 y
" ~ ]8 j" L7 [! T% Jprintf("\n大王是:");
: \& [2 v' Y6 {6 Q- x# O4 I" @ for(i=1;i<=M;i++)5 J& a$ L1 K6 }: ?
if(link[i].number)1 ]9 v( w7 h; _7 m- m
printf("%3d\n",link[i].number);8 ]0 u3 ^' l" j9 b1 a' y
, J4 D. G! z; w) [5 D* E& Z/ E; m# @: l, g) [7 r
}
! n$ d" P2 |% m' v5 n! p0 s第三种是普通方法for循环
1 \- v2 n. n3 u( K! w#include<stdio.h>- a1 V" w4 o) c1 R3 ^" ^4 E; V2 ^
void main()
/ P' e5 {1 X# f- C0 b- x2 g: D{ int i,k,m,n,num[50],q,*p;9 v- |( G8 I4 G
clrscr();
( V( j% i2 L+ E6 c. c printf("input number of person: n=");
, c8 E/ E7 b7 v5 K# B scanf("%d",&n);* p* h7 m: j0 { B' E. z- p; k. F3 F
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只5 G0 N( d2 P9 M. u$ q
scanf("%d",&q);
' h9 Y9 r+ C# f* P7 c p=num;6 s+ |* a) F& F
for(i=0;i<n;i++)
4 x* p% k5 ^$ y" s- J' X K *(p+i)=i+1;( _$ }2 C' ^8 Z8 [7 d' N
i=0;0 `* V7 D8 |( m
k=0;
% N' I& X+ u* b/ S m=0;
# C0 M$ M, i$ O while(m<n-1)9 U3 v: @8 J* \# f+ b9 u' H+ o
{if(*(p+i)!=0) k++;3 G, S ?! j% b$ r7 U7 ~
if(k==q)
* Z/ q! B9 _$ s2 B# Z- Y6 W { *(p+i)=0;
+ H/ j3 N p% V. S* q k=0;
) k. m# q, f# K0 d* u m++;( k, I1 Y$ I) X5 H/ c2 I
}9 w, [% @3 Q! s% g. w3 q9 `5 r7 w
i++;
2 ]! P/ P3 u- c) N if(i==n)i=0;5 `2 ^1 K) W8 o* }
}
4 ]6 o' P# b5 r. C4 `/ V while(*p==0)p++;( g% U! T/ h3 g/ `+ Y( d, P
printf("The last one is NO:%d\n",*p);, T; R. |9 M5 [1 [
getch();
$ ^" K: a7 H4 |. Q! @; B) @: m8 n5 f3 Q& {
} |
|