|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!4 S- q5 w. _7 @ z* ^( Z
这几天我在忙着编一个问题,我用了一种方法编出来!
h! l1 M. N) k# {但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
) |. j4 p! C9 z. ]3 p5 O6 }( g# v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 | t* p9 Y: e
6 y4 M( P6 L, }$ G3 V T; M: P8 b/ s' Z" w2 {
题目
# E& s5 u4 Z9 }, W( _$ ~# f山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。5 F6 O1 }1 L/ T9 e5 J
第一种方法:利用循环链表" I9 Y& e: Y# c5 F
#include<stdio.h>
! H' f' {: Z1 U* h/ S- B: V#include<malloc.h>
- j/ V0 A3 o7 D3 d1 P' O#define M 8 //共有8只猴子
5 z. I! s$ \2 X& ~5 X2 u7 ]#define N 3 //数到3只时退出第三只
& c2 k& v: d9 z2 v t8 ~7 Otypedef struct monkey
; K+ x' D% g7 \+ A{int number;/ y; |/ \) w9 E( z b
int flag;; E! R' b2 ^6 U* R, X o R8 {
struct monkey* next;
+ l6 R) n; }6 k$ w- `}MONKEY;
. T5 d! d% q% \' A6 pmain()9 g4 l$ N6 a" t; F) z
{ MONKEY *head=NULL,*p,*s; C( M# G* q ~2 n0 _
int i,sum=0,count=0;$ l; D" ?/ [4 w! o: h
clrscr(); //清屏
3 C0 ?* r. @- @) |- A p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存* D" u0 _# X/ p- H- ^8 e% F
p->number=1;p->flag=1;9 l; U! F5 _- K- W% I
p->next=head;
; t' ]/ [1 k6 N0 c2 h3 H" J8 ^ head=p;6 s$ {+ e* T! r. N- y! N5 x
for(i=2;i<=M;i++)
4 T9 v- ^/ T$ t+ L8 D { s=(MONKEY *)malloc(sizeof(MONKEY));
4 \7 t7 p6 [( \+ D7 K s->number=i;s->flag=1;" U& t8 P& K q/ O9 g: T0 P
s->next=head;
9 k7 u% f+ z) k0 ` p->next=s;p=p->next;
4 Y+ j( C3 v, l. ~8 W2 v! ? }
/ P3 R K f6 W$ u p=head;
9 T* L% {: q, s2 m+ M( e5 k0 J7 l for(;;)/ Y Y( u' S+ y: @# K4 ]- j
{if(p->flag==1)
1 b! {% e3 i# t2 e X count++;
, V. @+ s8 o2 q. t if(count==N)
* p5 ~% O$ f7 s8 }) {& C, ^# M! m {p->flag=0;% U4 q% O# m" t+ x
count=0;
0 b' H. ^* j1 V sum++;}: d) \( V1 X% V( Y: S a
if(sum==M-1)& b9 Y# Q. \; c6 w# c# j
break;9 R, s* g2 y) c
p=p->next;
# I* W% H. L/ R+ D2 ~7 D9 J d9 s }
& O! Z' {" k$ M7 ^ p=
. O) }# w: z) X head;% r5 J7 _; i$ w+ R) C7 h6 B
for(i=1;i<=M;i++)
" x7 F9 w# B7 x7 b3 R" h { if(p->flag==1). T' U3 A# k; F" l
printf("\t%d",p->number);
3 U. Z- U, O/ ?/ Y4 Y p=p->next;# S/ c% ]' K! G, G
}" M9 I( V# `4 K _- v' ?! _4 e
6 y+ Y9 r) k: C% D
; F- ^: Z& m! b
1 V2 b4 m$ D- k' ^/ }) m6 R1 }3 a" L
}
! h4 F2 g# L6 g7 T, W6 X6 E第二种方法:数组
& C, ?5 M. a' R: V7 x' o( D+ |#include<stdio.h>6 K6 {8 H, j& Y: y" W: @1 w8 W
#define M 8
; m* j" K3 I" ^2 Z7 O) p2 hstruct monkey/ {3 [8 H v w5 S6 l
{int number;1 D- ~( M3 M5 h
int nextp;% b$ o4 A& X5 [- H3 p) f
}link[M+1];
! x! |4 U. y! J! H& a( x n- h6 ~. P2 S* j' x @ S
void main(); C7 r' Y9 W0 Y# O5 F
{int i,count,h;6 N$ Z* y5 |+ w. d) s2 L) E; j" }
for(i=1;i<=M;i++)* S6 {( a$ k8 [ V/ B9 S/ [
{ if(i==M)
0 P A; r, o" g+ z2 l+ @ link[i].nextp=1;! s) j- H, K" X3 i
else) t9 O \& s) ]
link[i].nextp=i+1;& s. |7 K% Y Q( ~8 z5 a$ e7 C6 f9 h I. j
link[i].number=i;1 ~0 G8 W& n( \+ ]% o
}2 M, }' [, [% `; E
printf("\n");* {& J4 e- h% V* d/ [, l
count=0;
6 w n) M1 A, i* Ah=M;" a. b( ^# S! T- W$ A2 S
printf("依次退出的猴子: \n");% P4 N& D# y7 l, ]4 E( P
while(count<M-1)( A/ W1 S9 k; t1 G, t
{i=0;+ }( r8 E/ Y5 w- c+ l, S1 U
while(i!=3)
0 a: u8 p. b) W+ b: Y2 P{ h=link[h].nextp;, o' u6 d, b* k5 `! k
if(link[h].number)" B9 ^3 w/ Q/ t; }) y- ^! i* ?
i++;}; L1 U. F$ S/ |* W" `8 F0 G
& _6 e! H Y8 Kprintf("%4d",link[h].number);
! {2 y! q, h/ f; c/ \link[h].number=0;
* r# G4 b M$ {. {5 bcount++; L- D! Z4 l8 E" ~: ?
}$ x Z0 @+ s: D, A8 @. B
V1 c( @$ X4 }! i
printf("\n大王是:"); ]3 r; y( i$ Q( k
for(i=1;i<=M;i++), }9 o# e6 L2 T, Z% ]
if(link[i].number)8 R! ^$ E: p8 h1 y% y/ I9 G. {
printf("%3d\n",link[i].number);/ Q6 D: V. X- J" ?& l, `4 J: I
& T. H; I* t! e5 P; j; l. [! Z, ~/ h; ~, q. Z, y8 d- Z/ K% C
}
) Q- K% ?2 T B! h _: _第三种是普通方法for循环
* ?3 k9 a6 R5 s! h#include<stdio.h>4 K. e b7 o& j$ v. V3 N
void main()6 M) i! F4 V. A
{ int i,k,m,n,num[50],q,*p;; Q" ?& z9 s e/ h
clrscr();# D- V( L: l& v5 n% Z9 u
printf("input number of person: n="); l) A8 ?, `# o+ o$ a: ?
scanf("%d",&n);
4 e! N/ V8 |8 ]2 f3 g J0 |printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只$ @7 u- t: g) |$ S9 d
scanf("%d",&q);
( G: F+ H A" _# L M8 @9 ?. p p=num;
2 y/ [, k9 t, A. A# e1 Q# N/ v0 r for(i=0;i<n;i++)
* T9 f F n# W/ K- H *(p+i)=i+1;, }& U: J9 y- U4 F3 ^' Q7 D
i=0;6 }% N7 W. r. Y& D2 `
k=0;: x0 G+ X* E& [* O
m=0;
$ Y9 h0 _$ e4 n1 u9 R8 o while(m<n-1)- u6 N9 g1 ]9 Y8 S
{if(*(p+i)!=0) k++; O$ [ v( n. X' y. j
if(k==q)
& k6 H+ O' H Z5 s# V: W { *(p+i)=0;
$ ]* U: }. |( W0 U' g! d4 W k=0;2 N: R$ Q7 @- |, w0 P/ R: s
m++;
% |& j. {$ g X) Z }, K+ U4 E0 Q( u) \3 P* T
i++;
0 I: N' w1 C$ C7 ~: K6 P* B if(i==n)i=0;
0 R; r; G' c: a& N/ ]% E }
9 v6 y% |5 ~( z* D! g3 u! n- R" D while(*p==0)p++;) R4 }3 U: j0 k, _, o5 w* J
printf("The last one is NO:%d\n",*p);. M. G' ^' n! g) t
getch();& c0 ^0 A9 J7 k5 |9 z0 B. k
- S. e* ~$ v2 A. Z} |
|