|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
; b# M& x6 s0 d) J这几天我在忙着编一个问题,我用了一种方法编出来!4 v" K. R' b8 `) B6 @- _$ C
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!1 P3 h' i0 i* n3 o) _$ x
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 7 h: v, w% @% {3 W9 w( H/ \
9 ?; g* u& Y- e5 J9 w. N
- i" q" |9 a! e8 s1 |5 ~
题目" ]% ~; t+ J: r3 w1 ^
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。6 U# B+ I7 \/ J) g: V1 s2 r
第一种方法:利用循环链表
, G+ y; P% k% X) I* h7 P, }#include<stdio.h>
% {6 r0 x& B! U" Z3 V C4 l0 R1 n- i: O#include<malloc.h>
" f3 N; x3 | R4 t) N#define M 8 //共有8只猴子6 G: i/ J* o ]
#define N 3 //数到3只时退出第三只8 Z1 J2 U$ P$ }2 j
typedef struct monkey- `! v* Y. e9 h z& D
{int number;
' b0 Z+ W1 y3 u, ?int flag;7 |8 e# I( ?6 ~6 }4 c3 ~5 y6 U* g
struct monkey* next;
* N* ~; B! y2 ^8 v- S+ Q}MONKEY;
g t/ G( ~0 I2 X" _- Fmain()& u$ n3 @: G# x! d
{ MONKEY *head=NULL,*p,*s; L5 L6 A8 m. a, w# A
int i,sum=0,count=0;4 Q) G& U, v; W' N/ p& r' s
clrscr(); //清屏# m; M9 z* R/ I# o( j% x# ?8 G4 w& P
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" P9 K0 ^. u( w$ X/ f& Z E6 W p->number=1;p->flag=1;- h$ C1 ^! _8 U" y/ B
p->next=head;
8 H( s% @$ X0 ~1 X; k head=p;0 A$ G$ N, p* C* @
for(i=2;i<=M;i++)
; t! b- f6 l% p) [3 `0 a { s=(MONKEY *)malloc(sizeof(MONKEY));! R. b7 C+ ~ d. {3 t% h
s->number=i;s->flag=1;
) }5 q4 A" \3 X. l/ y5 E- R s->next=head;6 w2 x- X3 y. Z3 I. T
p->next=s;p=p->next;; S/ p) m1 p+ k2 s5 Y+ X3 x
}2 w3 _1 a# r0 ^! ]! t; E
p=head;
! U2 l8 i- l8 A, l1 f- ]$ t for(;;)
' h' l: J$ Z' ]2 s0 z# r {if(p->flag==1)
' i% [! t) D8 G# T" S8 n" F% ~ count++;" T6 M' M# w) N1 r2 \+ _
if(count==N)- |5 S7 q1 k& `' \' l* X6 G- L& o; Z9 A
{p->flag=0;
) d+ U) h5 L+ J! L! } count=0;( y \$ ~% r+ f5 N' o x1 V
sum++;}
5 o0 g# V' g6 K9 L if(sum==M-1)
4 ?# S* h0 A# P( { break;
$ C$ h$ l; k! w7 [$ O& t/ H p=p->next;% g) T% d# x1 Q7 }9 t- Y
}
8 W+ A( |# r; A& f% h p=5 p% L4 X, }* T* `( R+ H
head;* M6 I4 d1 j c. ^8 w) \. a
for(i=1;i<=M;i++)
" w8 ~1 u+ V# i5 K" ]2 j1 b { if(p->flag==1)
^3 g. C" q8 n9 H Q5 c printf("\t%d",p->number);
& f/ ^& s4 D# f0 G0 r& F p=p->next;: e3 M- n, z5 d
}! G* L7 P6 d( a2 y% d
& g. @& Z# Q2 U
) E* z* P8 ], o9 G, `% @
7 s" l+ A) E; u- T3 y* S}
7 v" e6 e2 i: b* Q6 p( }第二种方法:数组5 K) f9 U) K* s# L; _9 _/ M' c- `8 [
#include<stdio.h>
/ t8 T; \: j5 P/ C' C' J. M; H( I- y#define M 82 ^ O2 V6 u: q2 _3 a
struct monkey
' W8 f3 G/ V P* \+ T{int number;
( ^5 {. w- e; J. S7 P. fint nextp;( c( B6 e' o+ j3 ^$ O3 a2 L
}link[M+1];
. Z7 d. c4 V% R- K( j
8 j% d8 u0 I o+ \void main() J, e7 r& H8 B: R2 M
{int i,count,h;; v1 u( M+ m' E% V/ _" N
for(i=1;i<=M;i++)
" ^5 d3 V6 W4 {" y{ if(i==M)
7 H7 P$ T" ?$ u& k- L$ M& H link[i].nextp=1;
) F1 m6 a4 S+ t7 r* B else: V5 G8 A: b/ O. @* Z4 h
link[i].nextp=i+1;: O+ I: i4 \, ~
link[i].number=i;
2 j D& [$ \- }! U* ?}
9 X' v0 i9 z4 q4 K$ k3 `2 Wprintf("\n");/ Z) @) b7 v- n
count=0;) d' E- T1 i- ?
h=M; G! P# ^ L4 a) N- i+ ~
printf("依次退出的猴子: \n");9 L' a; \+ q) s/ K. _' p
while(count<M-1)
, h V& U: o; I{i=0;
3 C" l5 t7 \4 uwhile(i!=3)4 W; @2 w2 k$ e) C! b
{ h=link[h].nextp;' f5 Q; e L$ T- G# ?6 Z6 w
if(link[h].number)6 O/ z# V& P7 A1 X; F* K: m
i++;}4 `: @' W3 W' B8 r' s* d" a# S" h. Z
5 l" T0 M, Z8 @( a: e) ^- Qprintf("%4d",link[h].number);% \) B s$ k3 }, z
link[h].number=0;+ Y( k1 `" H3 l/ G% K/ ^" S
count++;. _( }4 ^, U) v4 Z4 [: N/ `+ }
}
8 v% q/ |& V# V. o/ f
/ O3 a) b6 X# Q. M7 ~printf("\n大王是:");' y+ y' g+ _# v0 { O+ z% B% D3 Q/ X& e
for(i=1;i<=M;i++)* K7 A, N) x; {( h$ H
if(link[i].number)
$ w6 e& h. A" h$ d printf("%3d\n",link[i].number);. j: L [) \7 E( j8 A% d( h
0 i) b6 |! V. U. H7 A8 n
2 K/ n9 R, G, F- |4 h, L* ^
} 6 [ a% W2 }8 n9 s; `0 ]8 m2 H5 E
第三种是普通方法for循环# Q* u! v6 l: x3 e, m% _- v7 ^
#include<stdio.h>9 M4 [# X# O. V' f5 X$ j
void main()% J+ ?( Y& x/ S
{ int i,k,m,n,num[50],q,*p;
2 g6 `" v) b: ]/ V4 Q; C clrscr();2 O- n. I3 o# N
printf("input number of person: n=");
3 _ N! W% `1 j4 t+ j scanf("%d",&n);
% p; ?% x4 m8 w. U4 M" r0 C" F2 eprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% n+ ~, z; K4 x f
scanf("%d",&q);; d2 a+ {" c( {; H! U) n* U7 Z
p=num;! R* G" _1 O' l' T' }# P o
for(i=0;i<n;i++)
! p1 O( z2 Y) O$ p2 {' l *(p+i)=i+1;- n# t; @; }. r& I8 W3 `$ h
i=0;
, H) Q3 y2 z# e4 M2 t k=0;
+ H1 v# E; f7 m) E m=0;. ?5 O' H$ v4 s$ B
while(m<n-1)
; t+ ]' A8 A* M {if(*(p+i)!=0) k++;' h1 {0 |$ v5 [; } V) n
if(k==q); ~- l4 |% B) x( p5 k9 Q0 `+ r
{ *(p+i)=0;
* d7 q' x i+ F8 _ k=0;$ v& O( D& b! t0 q# J
m++;/ z3 G9 C6 ]& Y. u1 k
}
) N2 a7 |" ? [ i++;1 z8 {9 O; ^' o& U
if(i==n)i=0;" z$ `, I1 U. ]% V( F0 M* b; _
}2 l! | S0 ?0 q ~3 N% w; e6 f
while(*p==0)p++;1 `6 z" W N. a5 V; h) J
printf("The last one is NO:%d\n",*p);4 E( l# f. \4 B8 Q6 T+ a
getch();
8 {' \4 r/ x3 E% X K; I0 |7 b& U' W
} |
|