|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& g" O7 P4 G& q7 e
这几天我在忙着编一个问题,我用了一种方法编出来!
5 X- e' t4 Z, ^$ h5 g. u但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ a' r3 V. h0 R+ a注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 Y4 B) n4 e: Y! n/ D
, q0 E% Y: Z: n/ K, Z' _3 a8 A# B+ i) Z$ ]7 N2 S
题目
9 [) v$ W9 x2 R) q! L& F! N; v$ T: k山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 C7 _' j) M D第一种方法:利用循环链表: v+ V `5 V) ?" h2 v& {
#include<stdio.h>
1 j U- A/ M3 D7 q+ J5 A' G1 B#include<malloc.h>9 j5 R; x2 C5 Y, r/ Z5 H7 w
#define M 8 //共有8只猴子
/ P8 j) U: S; p( G#define N 3 //数到3只时退出第三只1 ^- [) L F: \; M: m
typedef struct monkey
7 m$ M3 q% P$ m! k{int number;4 l$ c) x) p( y" J% U" K
int flag;. ^7 e! | E# ~
struct monkey* next;, o5 r- Z# d1 e) n
}MONKEY;# P5 T' A* M, K7 _4 q" O. ]
main()
k3 |( b) ~5 G' s6 {/ u{ MONKEY *head=NULL,*p,*s;) L" Y1 U" Q2 l" M8 A, q/ q! F
int i,sum=0,count=0;2 B: x/ N/ }. U3 J3 b
clrscr(); //清屏# u2 u, E6 Q" n _/ E% c. n8 ^
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存$ e4 G$ e' e K3 V
p->number=1;p->flag=1;
# ?- F! K4 L1 b+ g! u% C& v* I p->next=head;4 \( X, C. ^& _# _9 R
head=p;
- `$ H. H* l( u for(i=2;i<=M;i++)
1 B! u n$ t8 X { s=(MONKEY *)malloc(sizeof(MONKEY));
4 P, c+ ]) w; o. A s->number=i;s->flag=1;9 P& g- T4 W) v5 Z1 I3 G
s->next=head;( d" R: o, f2 k: d8 z
p->next=s;p=p->next;
* p/ D: t$ O* i$ g' |" p% m }- y- H* H4 b. s
p=head;
7 A/ K$ ?- s6 C' M1 ?( r for(;;)
3 ] `2 D1 E/ p& p/ |/ k {if(p->flag==1)
/ f5 p; h, M; q count++;
- N y/ o( j; a0 m! W# t) N/ b if(count==N)0 d+ K; X/ Y K1 w
{p->flag=0;
, L0 C% V5 x; M5 v9 E" s2 j7 x3 o# G count=0;3 o# A* G, W- p; a2 y2 W( I R
sum++;}1 J- [2 s P- l4 b
if(sum==M-1)
2 P! g: \& j/ x5 q0 N# b break;
1 S. c4 {0 f* Q* P; Q8 m( t p=p->next;* o& n+ r0 X4 E& E; G
}8 q p1 k4 o# u6 p9 N1 D) I
p=1 O ?* B/ \) c& a5 I0 T$ j1 E
head;
* v0 }: e: V2 ]6 }3 ~ for(i=1;i<=M;i++)' @4 F5 H: b* F0 U4 k/ L- B
{ if(p->flag==1)
6 b8 m$ d+ ]$ h4 X3 d- U printf("\t%d",p->number);
) r. j- E, Q3 t6 n6 H+ N p=p->next;
# _3 E; W( _3 m! o7 Z0 b3 I+ S }
" o" |# C' S9 {$ Z" X$ Q. _
8 N W k0 U5 X9 a/ @1 m# `- w, @( Y+ Q2 z( j
5 X! G( ]* O7 i- H2 j/ g0 q$ x- w6 W}
; y& H1 X8 L8 |8 ^6 p第二种方法:数组
F8 Y! G5 b5 q% k6 b5 l3 {#include<stdio.h>
* m( l3 F, F3 b' O8 z+ |+ g: g#define M 8
! C& E3 x3 |/ F; n3 H& wstruct monkey7 {+ @ |4 G; n, ^7 y5 z
{int number;
9 u% M8 Z3 ~' T5 N' U; v& t Bint nextp;; P3 Y; N, i0 {" }3 d. z
}link[M+1];
" p; w+ x0 u: x% ~! Z! c8 x+ b
; } L/ p+ c @9 Y$ g) fvoid main()
" W% Q$ E( o% @* _{int i,count,h;* [: o& ?$ _: A, _& W7 I
for(i=1;i<=M;i++)3 N$ o. [8 D, X. F' s& W
{ if(i==M)
% n1 P. o! G! s* N5 f link.nextp=1;
# q( S G k7 ^2 N else4 Q& G# C* R7 K+ {5 }) `8 m$ }* H
link.nextp=i+1;4 J3 \: @2 A7 Q
link.number=i;4 p" i8 @0 }1 q" O' `
}: r$ v e1 `8 L' I
printf("\n");
$ \9 S" _2 Q! v9 Y9 rcount=0;
& c7 K+ X5 j& Ah=M;
* M1 v5 I' z. V- iprintf("依次退出的猴子: \n");
* A& K! q% B) A& q/ O. G$ ?3 Hwhile(count<M-1)
8 S7 e }' ^" u& t* o2 T{i=0;, [! Q7 w/ V0 r; }" { T1 z
while(i!=3)
( ?6 }' V* e4 ?9 g# E{ h=link[h].nextp;
8 p, z5 K. h5 Z6 N q2 Y if(link[h].number)
/ R8 I- r( N- z# V: i9 Y i++;}$ F8 Y s9 b+ N
. _; v# f+ } y/ Z
printf("%4d",link[h].number);
4 ~/ b7 b ~$ G- Mlink[h].number=0;" j/ U# T" v) v! }$ n( u3 Z
count++;
, d" B6 R `; L8 A1 H}3 g# e O, [+ M" s) U p0 [" ]
0 @; @. A( q; h* @printf("\n大王是:");- B3 ^% P) s: Z; k- @
for(i=1;i<=M;i++)- x1 Q' R H! F- p ]
if(link.number)
8 o; x- h" c! w h( o printf("%3d\n",link.number);6 B# a$ P" G: T; S( O+ D7 j
! G* k; B$ I' J6 t+ ~$ B y3 ~* D7 i. K7 Z# }$ G/ p8 \
} + m2 J' X% G F+ p( V) n
第三种是普通方法for循环
% i3 ]+ O. r- ^2 E3 I#include<stdio.h>
/ s- R8 M& A9 s& Gvoid main()
7 U0 U/ a6 S0 G) ]. o+ `{ int i,k,m,n,num[50],q,*p;5 D3 c$ r( g9 ]2 D
clrscr();
" Q2 E' w7 t" v& F printf("input number of person: n=");
+ V. o& x Z9 E e scanf("%d",&n);2 r' t1 t; _: ]' [1 M
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只/ h! Q) v0 x2 [8 f0 g
scanf("%d",&q);
( e1 ?: r9 A7 U% J# y p=num;3 W0 ]! D) Y2 M/ J5 q {% x# k
for(i=0;i<n;i++)
. o: C% `% z8 V- I *(p+i)=i+1;
! Z4 O4 d; p' I0 N! T% C+ l3 J7 s i=0;# b6 R; y# l9 R. \% J# M2 [
k=0;
. E: ]2 K& j- l m=0;
; y, m8 o. c. ] while(m<n-1)9 y, D3 `. D! c( A N5 {
{if(*(p+i)!=0) k++;
0 \) u& p& q7 E if(k==q)" l2 c; M0 ?- n
{ *(p+i)=0;2 {& n- N! q6 J; b/ e) A
k=0;- e3 D4 \/ g+ X6 k* [( K
m++;
5 Z5 n4 {# Z. G" A, b+ E( J$ Z }, S2 E: G5 R+ d. q$ }& m& W* o
i++;& O( q+ K7 {" Z5 \
if(i==n)i=0;
/ y* E$ H7 C+ _# ]5 H }4 A9 ~$ V" E1 S1 _6 g- o
while(*p==0)p++;
& {0 x# _$ c: W6 f8 J* B printf("The last one is NO:%d\n",*p);
1 ]% R' a! {+ R2 ^ getch();
$ h! \2 U) u0 D& \; U, `6 v
' z6 G9 `& j- Z} |
|