|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!2 T$ P! o) B# C3 M _
这几天我在忙着编一个问题,我用了一种方法编出来!
1 B; A+ u4 P( T4 V& I! G但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
; K k* D4 d7 Q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 k {) T3 ]. \# ?$ y( Q- l2 b" W" ~6 M9 v& S; w
2 G/ }7 S& Y* m5 `$ s' ^
题目 ?. u, K6 y% a8 z1 |
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。) {; Y% ?; ~$ l) b! Y6 I& ]3 t5 S, S
第一种方法:利用循环链表% ^/ W: y5 f/ j( k) e% x( H
#include<stdio.h>
: a5 F% E6 I" C5 L#include<malloc.h>8 L# r7 D- `5 u3 W! y; ~- T
#define M 8 //共有8只猴子! E$ P% l# y/ l# j
#define N 3 //数到3只时退出第三只
* z+ v9 V5 S' Z% y+ ctypedef struct monkey m; L; e* s e" T
{int number;: E- U/ ]% a# U: s9 {
int flag;4 o1 O- G* c. I( N
struct monkey* next; h7 F7 u3 c3 o t+ L) t. p
}MONKEY;
; s$ r+ L( `! N/ U4 @) Mmain()4 Q/ ^7 ` i: N o9 `3 Z
{ MONKEY *head=NULL,*p,*s;
9 X) F( b6 C2 R! [2 Z, M! t; e. z! o int i,sum=0,count=0;
$ C" z" }: E/ F8 \3 W# o clrscr(); //清屏
+ g1 e9 R5 A* ~, x9 Z. C( j" s p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) B+ c8 Z% ]# B1 h* u7 g p->number=1;p->flag=1;
# P, Z2 ]4 V/ ~& s% x0 r- Q/ @* S p->next=head;
. U4 T; {# j. h" v head=p;; p1 z e9 N5 N) `# C/ W5 p- k
for(i=2;i<=M;i++)
$ \9 ~& e% U" W { s=(MONKEY *)malloc(sizeof(MONKEY));
$ o+ q3 y" y/ z Z3 K; a s->number=i;s->flag=1;
% Q& f9 v8 ]. q; f( j s; z s->next=head;
# J0 D7 I9 D0 A p->next=s;p=p->next;$ e3 m' M' ~: G0 W$ A$ h- L
}
- ^) ~: W' q% A; X8 X3 Q0 A p=head;
( ?0 j0 O6 C3 r* Z7 h. A- M8 F for(;;)7 `: `" A* [: E2 C/ z; n1 r6 C9 ]* m6 _
{if(p->flag==1)+ p* t- r. u( b$ ]$ w, Q
count++;
5 C! m' R1 r3 j0 R6 Z7 x if(count==N)
& l3 g, S; x, J9 z1 n9 R. ^3 C {p->flag=0;
8 m$ r9 j0 ~' `: f count=0;8 {6 m& `) C/ s
sum++;} a, u! V. c. @* C
if(sum==M-1)8 V1 G0 o. ?( M9 m! d. J% e9 d" G
break;2 H/ @# z6 b+ h
p=p->next;
2 T* [' x" j5 p1 D. [; u) Y }3 M5 H2 |& c# M0 `3 e
p=
3 k5 H4 P t8 w0 y head;
1 w; X0 X0 d1 }/ s. P3 o% E3 h for(i=1;i<=M;i++)# q3 Y1 X7 _3 Y% f: Z Y
{ if(p->flag==1)
% o3 [( W: |# _9 j2 S# c printf("\t%d",p->number);9 N$ D" ]2 ? J# p \
p=p->next;; R4 T. z0 m& ^9 ?, W' @' P
}% i. L* R$ O9 c7 S8 [
" ?8 l+ U; B# g7 t7 F' Y) i, v
* F4 R+ }: U5 u! t
6 i( c6 \4 F; d( m. A( y}
0 x- j# i9 K. a |3 G第二种方法:数组+ p; m- S# f4 ~# |0 j( Z
#include<stdio.h>! x" i* S3 ~; S. f: p/ y
#define M 8
# m4 t$ Q H/ `4 Dstruct monkey
0 A' Y5 @; T) }1 A- {# o/ R) G{int number;
' ?, H' W' K8 s% Z/ ?4 `: Vint nextp;7 I' c3 [9 y. B n& T- g
}link[M+1];5 G9 w, Y; |! v. E1 E
2 L4 N( G; }7 U6 P
void main(): C" y- q, R- O- ]; h( [, Y. D
{int i,count,h;: r8 W7 ?! ^* X% A
for(i=1;i<=M;i++) ^) I" v) J: K) x; Q0 E, |
{ if(i==M)
8 ^; o, F8 Q0 `' B/ B' H2 X link[i].nextp=1;
: H. r0 O5 t4 ^2 U; _, Z2 [ else
( g3 G+ j1 u L: J link[i].nextp=i+1;5 |& b$ C& q/ i- }6 l# K. F) u
link[i].number=i;
' U+ y- R) \8 I: f}
8 d* t: e! P( y, b: ` `7 K2 U2 yprintf("\n");
. y0 `: O+ k( d# C$ kcount=0;2 _. O( p2 w% ^$ ^5 ~4 ~0 o0 P4 T
h=M;/ P. [: ?# o, A0 ^, n- V
printf("依次退出的猴子: \n");
; z! t- s( a4 P( b* |" ^ kwhile(count<M-1); d. K8 u5 X/ D
{i=0;
& ^8 Q/ ~ [3 g) l; K2 i1 [" Iwhile(i!=3)
: H& l: q! _" i1 P& d0 D{ h=link[h].nextp;1 b* G! B# M/ X1 W8 i* k/ W
if(link[h].number)
! C' w5 m0 T0 v5 C; x) p( V+ h: @2 R i++;}* Z% ? T1 y+ k7 ~8 \
; s; P( p+ M* z7 o( Z3 { V. e. A
printf("%4d",link[h].number);
$ Y, @9 ~8 P' Olink[h].number=0;7 ~/ a3 l' l$ C" w
count++;
; A5 P( f3 t2 P4 F3 V0 Z}
! k8 X9 H" W- }/ X; a0 k4 A6 [: `4 ]( L9 O
printf("\n大王是:");( i% D- O' s0 z* ^9 x
for(i=1;i<=M;i++): F4 ~3 L( B, j: V$ |
if(link[i].number)
6 J+ p A0 W. m& M printf("%3d\n",link[i].number);
. J" g- v: K: {0 F2 |
0 u& f% T9 b0 b5 f
y, t! W$ N F. F} 6 ?, n. t8 `( N) R; w
第三种是普通方法for循环/ @& U$ l% |' \- b6 Z
#include<stdio.h>) `! r- L- w! f7 ?5 I2 S4 u' q! b% s9 N
void main()
7 p; E6 ]# @ K0 L0 G# x) d{ int i,k,m,n,num[50],q,*p;/ H8 m: H5 n% V8 ^& R
clrscr();5 b" t) P) C+ i5 u
printf("input number of person: n=");
5 R- S# m- ^+ h Z$ \2 S7 r scanf("%d",&n);
- Z/ ~6 E# D5 @) v0 v7 cprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只+ U# H8 e2 o. L8 [- q' s
scanf("%d",&q);* J) ]) K7 {, d' D! `6 U
p=num;3 U" L4 E! T# S, Q& |" l3 [/ ~
for(i=0;i<n;i++) k( D/ Q! B9 M1 z, q1 ?+ l
*(p+i)=i+1;8 j Z Q0 t- @) S3 @& c9 ~
i=0;6 B7 u G* `( `: {0 m
k=0;. k: [! K3 Q/ n. X" [
m=0;
- E( B5 r1 g! y; p( N* y6 ]- t while(m<n-1)
* W0 q# Z6 |( D0 x/ @ {if(*(p+i)!=0) k++;
' y3 M; U5 K) ^8 ~# A if(k==q)
/ q: t; H# w5 c- s& r- @7 O, s$ q { *(p+i)=0;
" H$ k4 G- g2 i& q! m k=0;' m) w( x9 x' z' O' K1 ~3 e: P% h
m++;5 q" n8 }' I% {- T
}8 F4 v8 U- S4 u1 ?" F8 A8 t. c
i++;; N. X y% I j
if(i==n)i=0;
I; P, {, g9 A E7 _ }
7 X2 m; Y$ D6 Y7 f' \ while(*p==0)p++;
4 ]0 b% i7 T% R printf("The last one is NO:%d\n",*p);
8 y$ J- u8 a% l1 t) M getch();2 z. }( g: E- I3 f8 t* H6 B
- O6 R* _9 \% w% \5 O/ S6 Z} |
|