|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
B% p. V! r. B+ e8 I4 U这几天我在忙着编一个问题,我用了一种方法编出来!1 i1 E0 R0 W, S4 |1 N! u. \$ M
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 w" S: z! t6 r% G+ f注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 3 g! S4 Z3 R7 A2 ]- Z W
* C) b y" Z3 X( ~; L/ f E9 O1 C% q, h6 I5 s5 z% N+ L
题目
9 r M; ]& D* A山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。. I; r) v1 P0 d p8 J/ B7 l' K& l
第一种方法:利用循环链表
# i1 B7 q" l q9 Q#include<stdio.h>
& O- ^0 p9 K; e e7 W& ^0 X I% E: X#include<malloc.h># T2 u! A, t( l- |" b/ t5 _
#define M 8 //共有8只猴子
+ Z) Z3 b* Z0 G3 n5 e#define N 3 //数到3只时退出第三只
# @, f$ d9 }/ ?/ \2 k i- Ptypedef struct monkey
' n8 j) n7 S2 @, j4 r{int number;
8 l+ F' g+ a8 {( Y' vint flag;: A) b) Z) Y% |( @! d* J; p
struct monkey* next;1 F z! M$ i6 ]( ]* N, Y" M; P
}MONKEY;8 D* ? \4 c5 j" |" `& d
main()( U* d1 Z0 P7 f" E# ?
{ MONKEY *head=NULL,*p,*s;" e5 |2 s+ o$ [0 T' l
int i,sum=0,count=0;; G# Q( \8 H1 M- V4 {* x( D
clrscr(); //清屏" O, k3 c6 J: Q, Z( B8 L
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" k, x0 F. ]4 b7 A& c p->number=1;p->flag=1;0 B. v, O4 G: h0 Z* |2 x) o
p->next=head;* d: p2 Q1 O r) q: n% N; W- w* ?
head=p;
* Z% Z! O- A( H& ?! p5 Q for(i=2;i<=M;i++)
+ t' l+ U+ Y5 V6 s, n { s=(MONKEY *)malloc(sizeof(MONKEY));) t9 I* E- x2 M, _
s->number=i;s->flag=1;3 B+ r1 m& H+ @# R! Y5 i9 r+ i
s->next=head;: U2 O0 @0 F* j) O& j2 D, Z3 }
p->next=s;p=p->next;; j4 {. x* Y: W. F& e b
}' O) w- M: _/ k( P
p=head;2 X" f4 L( P) u2 y9 k! p0 x
for(;;)( P9 v; f6 D9 j" W
{if(p->flag==1)5 W& i7 Q; _; ^5 X) Z
count++;6 I) n9 O5 z- ~+ [, `5 o% t
if(count==N)
4 F$ D, Z- N: T; K4 G {p->flag=0;2 w" o' r0 a' b% C
count=0;" S# L6 Q0 E" t9 s. H
sum++;}
$ V* y: q8 I4 c- `& k/ D3 Q if(sum==M-1)
6 g: H+ c" g9 I break;
5 \0 N; @2 ~0 Q# y3 w p=p->next;8 R9 B8 {+ L& v6 @- r$ V- L
}
2 o' D/ m) u# u! S) R p=/ o8 p, r$ _& X0 M
head;! Q) N0 l6 D* |% M
for(i=1;i<=M;i++)
) |! Z$ J4 J0 K { if(p->flag==1)3 h& x0 K& r$ @+ U$ X6 J0 w) K; [. m
printf("\t%d",p->number);
$ D, @, f: Q$ A" x0 y3 w1 i p=p->next;& J4 H7 \3 |: U/ {4 {5 Z% n7 x% a
}7 z, P/ q; b" w. H3 K$ X) N
7 e/ k8 L7 {! b+ K# B! y
* e2 H! R0 p6 Y V! k) l4 O1 V% x3 y) k- s; Y: O5 [3 p* [- E# u
}
& w v( P( n" Y N, @5 @; z第二种方法:数组% V' A# P3 {/ c: h. M$ Q! M( _" b3 R
#include<stdio.h>! O8 ], y% q- E! l0 Y
#define M 81 a: J$ a' V7 F0 e* q8 ?. ~5 n, m
struct monkey0 ?. \5 O5 R8 g1 l$ M
{int number;0 \5 c, l0 \6 `- j% V
int nextp;( q$ u7 a9 H( A
}link[M+1];: R2 N& s7 o# ?$ U
. l( s" D) s$ n \
void main()2 y) f |! R w6 J( W/ J& D3 H( }8 j6 Q/ F
{int i,count,h;
4 i& k1 A/ l% _7 Ffor(i=1;i<=M;i++)
: s, x$ N0 t, A: d! A5 J; S( t{ if(i==M)+ t2 l. m6 D/ ~
link[i].nextp=1;' d% t( U& t- {) U& `( t% a; N
else
% o. }. E6 V0 w: r/ N link[i].nextp=i+1;
$ y/ ]( C4 P& V; T2 U% G8 Y. Y link[i].number=i;
! V, ]; C2 _: `; X' D) E}
`! f) Q0 T D4 e! F6 ~! Pprintf("\n");+ R$ A1 i; | M" [
count=0;( c* }7 K1 l! L5 V) e
h=M;
, \ [6 F% F6 b: |7 ^printf("依次退出的猴子: \n");2 f6 |) C! g( k% `6 ?
while(count<M-1)' o1 j: i' a I. W% {1 [
{i=0;) `6 ~- L) ~& i, d) }: ^( R1 [
while(i!=3)" i* c; V4 S! d5 J4 o
{ h=link[h].nextp;8 p$ L! I2 R% M6 N2 n) k. G
if(link[h].number)3 U& N6 }; d! }) @. }& `
i++;}
0 l4 F" t& Z$ t k6 s' w; A
; l) v( i8 I0 z' Hprintf("%4d",link[h].number);9 d* a6 J/ G) M" u* ?
link[h].number=0;' U/ b- N2 `) N9 m' i" X
count++;0 Q/ D0 h/ q ]" Z& ?7 v4 p( F, C
}
( I/ x3 x. _: p7 p8 I/ A* z7 B& y+ S$ }4 y8 j1 {
printf("\n大王是:");5 B& w9 z: H# r
for(i=1;i<=M;i++)" k7 r0 |# j* c5 G. G. s# i
if(link[i].number)% K, B' F8 K. B9 ]' K0 _* b6 a
printf("%3d\n",link[i].number);8 v' E4 D1 y m$ ]# B5 i; R
2 ^2 H0 M9 L' l' O
) c4 ?4 {& F; T3 n$ A4 ]+ F% i}
( F+ b8 r- P% f; y/ i8 X4 i( W: o第三种是普通方法for循环
" f) c- `* n5 G! K% p#include<stdio.h>7 f/ T* | O4 G: k
void main()
- J2 d; N) L/ U& N) y( T{ int i,k,m,n,num[50],q,*p;
1 r2 C% M3 G8 u& _7 `8 _# z clrscr();6 N( G. u! p$ c# f$ V
printf("input number of person: n=");+ Z* H) Y$ F: q% m
scanf("%d",&n); @( @1 z$ y8 Z. r
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只 a% n$ T/ X# Q! H5 }7 N2 u3 T& S
scanf("%d",&q);
" j0 Q8 }" O; ~9 K4 P) P p=num;
& H, a; Z8 s! e% [) R for(i=0;i<n;i++)- G7 O4 G! M" c8 _
*(p+i)=i+1;2 J% A. R2 ~1 Z7 A! c4 g$ {1 X
i=0;5 ?: f& T' M: M3 g( u; ~
k=0;
M: e6 u2 ~3 N1 i8 D m=0;
5 m4 Z. L& G0 f, z while(m<n-1)" y, c8 s4 ^5 q1 d3 o
{if(*(p+i)!=0) k++;' L1 D6 V* G2 l6 T" K( k
if(k==q). A P% e' Q# J- z9 M, ~; `( }
{ *(p+i)=0;( B6 S6 a7 k# G( l
k=0;
; a4 @' L" e! l; b8 ^ m++; A0 Z$ J) n- m" k. \
}3 C8 _7 W$ K) Y
i++;
2 P1 Z# F E2 ]; ] if(i==n)i=0;& ]2 m! {) i5 p
}
6 ?) o3 T6 I0 R. ^) K" X6 A while(*p==0)p++;
/ I& `9 ]6 L% ~2 u- q( U) {4 l7 Y printf("The last one is NO:%d\n",*p);
. W1 {) V2 n/ a2 e: P getch();
& R$ n$ i0 V* p0 _+ y* g7 t( r0 }) I5 l0 p" n
} |
|