|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( k% n! D3 n+ k8 }' \. {: g" f6 E
这几天我在忙着编一个问题,我用了一种方法编出来!
3 x! c$ ~0 ^& [/ e" X4 s' a/ c* H$ l但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
_1 k8 G6 {; w; @) ?* X) ^ Q3 J+ @注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 f0 g% b0 b3 c% j+ A2 {" u3 I2 V- K7 P* n2 y2 N, R9 H( E
& f; B9 Q! u9 b. I4 z 题目8 N1 n# e7 F& k3 p; @3 z
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。! w" E9 Y/ N' m5 H
第一种方法:利用循环链表
: O: [' A1 T# C8 J9 ^' V$ o#include<stdio.h>8 c) x: q, p" @
#include<malloc.h>
0 ^3 I: A; ? j, Q7 N$ T( Y5 P7 L#define M 8 //共有8只猴子
9 z i& D/ K# t5 s4 |# k# e#define N 3 //数到3只时退出第三只
2 U2 \8 Q* q: etypedef struct monkey
7 M3 H. d3 Q x# c* W h* R, \$ d{int number;
2 y( s# j) k' n7 g8 o+ Jint flag;* ~6 Y6 x2 O6 j# d; E
struct monkey* next;
% I5 w; D9 x0 t" E}MONKEY;: b$ U/ T; g" Z3 Z& }) ?2 Y
main()
, z! d0 e# R* D/ F% N; f{ MONKEY *head=NULL,*p,*s;
- x4 A8 M: J3 m+ z2 v( }0 @( E int i,sum=0,count=0;
; u! n) X; o( R& A) p* R) o; { clrscr(); //清屏
+ v( D% k: s( h/ R2 u5 M2 R5 ~& l p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 L" L7 m- {7 k3 U6 Y
p->number=1;p->flag=1;/ U ~: o# m$ ^0 }% y! q1 ]; y
p->next=head;
6 B1 D. o/ \# Q1 i, A) _8 r' W head=p;
/ P9 D a8 j( q5 y! a for(i=2;i<=M;i++)7 E& U" e N6 T$ y
{ s=(MONKEY *)malloc(sizeof(MONKEY));4 b4 o8 k/ n, w/ k6 m) {/ D, [
s->number=i;s->flag=1;
5 {0 J3 |) L$ `6 W3 n) L s->next=head;
3 A& Z0 q4 b2 u1 o: x p->next=s;p=p->next;
- J7 O/ E% a, u& u7 \. a }
w, U" ]) W X5 u. D, p p=head;# |. |: W5 d, y) l" A
for(;;), e! S7 J8 ?7 q3 m6 {! C
{if(p->flag==1). n7 L4 V/ b3 ~ m8 x7 e- |
count++;
8 b" s& \( T: H9 Y6 Z if(count==N)
* S# n. X( s$ v: ~& |2 X {p->flag=0;
* U) W7 _, k; X5 g4 F8 D count=0;
5 l% l+ v, A1 v- o sum++;}$ \" g1 e* ]' N) F2 I
if(sum==M-1) P) P/ y' w b
break;
/ k/ C) N6 f3 v. h W% g p=p->next;4 {* [ M2 ?) v
}
, ?3 S7 r6 |1 T1 o2 e$ W K& C. V0 w6 X p=2 X+ T1 m/ T/ U! M
head;
* a! X6 E v8 M* i1 x; X for(i=1;i<=M;i++)
* J, P# g1 I3 o0 u { if(p->flag==1)) T( [% x9 w0 T5 w" D
printf("\t%d",p->number);
1 M2 f& F4 P+ C9 b$ D$ l j p=p->next;; J8 M T I- d! F, V
}
7 Z2 m1 Z5 ^0 m' _' T5 I5 N6 d& }8 I1 z4 ]% S
; Z5 k0 q( g% g, N2 Q& A0 q v1 z
6 i0 o$ I3 Z$ j. {} 8 @+ Z, d! i6 m: k$ O
第二种方法:数组
: j4 M. H+ n. d( I$ s#include<stdio.h>: G, `9 t! `$ N
#define M 8* O$ F* ?% t0 c
struct monkey
* o" G1 T* l$ P& X{int number;* K) V! d5 Y+ S7 v P
int nextp;
3 `" y: F0 X- A. t3 b; ?}link[M+1];
4 Y4 q8 |% x$ W5 c8 L" t2 D- ~+ R# j& y# U
void main()! l- V( n+ v8 H x+ K: B; c, J
{int i,count,h;, u& X5 x" v" N; w
for(i=1;i<=M;i++)2 y9 C) u- ]0 J+ w- B
{ if(i==M)
0 |1 C' C5 t9 f Z4 R1 o link[i].nextp=1;
9 n5 \3 l; \) P else- P. S; i7 u2 F* [
link[i].nextp=i+1;0 y% l9 j! `( J3 M( r9 X8 j
link[i].number=i;
* u5 F/ N% i [* [( Z& a4 e}
2 N2 F0 `( e! B3 v( N2 P ] Qprintf("\n");
% p$ m& u% G, t5 G; icount=0;
" Y: m0 ^5 ^% k& W9 P, }h=M;
, O! A% U, H& d, v8 xprintf("依次退出的猴子: \n");, O1 L A. \* e* f" Y: k
while(count<M-1)
9 J* S) J! D9 w/ o0 S. k{i=0;: F' \6 j5 b5 Z, T+ F. y/ a8 _* X- |
while(i!=3)
G% W7 F, H1 X9 l{ h=link[h].nextp;
. [+ I+ u( Y# z9 G. F/ L, r if(link[h].number)6 S& _: i, @% E* e0 [6 h2 P0 Y
i++;}
" M" ^0 D5 o$ u- ]8 x3 }$ I/ N5 q! B3 G( K# z4 Z4 b! h- C* S
printf("%4d",link[h].number);3 x* r4 F' ]" w6 {. I
link[h].number=0; z, d9 X. Z3 h* E9 j/ p" O
count++;
; N; n8 P/ v' H}" I) F# l2 Z" x+ h. w P) I2 d% B
( G% K% Q# Y* z8 a% A
printf("\n大王是:");9 w7 x p+ \; i# y$ a
for(i=1;i<=M;i++)
6 `( n5 {& ~+ O9 I if(link[i].number)
1 `) H8 H) n. r2 S printf("%3d\n",link[i].number);
( I2 |1 ?' T2 G+ ~! U8 I1 \! z3 M1 E/ g
& M. W" r- y4 z9 S3 X2 @; Q
}
( o1 k' b1 J/ g+ _第三种是普通方法for循环) ]3 D; F: f: s0 P+ v$ F# z" n x
#include<stdio.h>
) j6 p0 V7 J0 t! s* avoid main()5 S5 r4 _+ F- K7 }5 `
{ int i,k,m,n,num[50],q,*p; d/ I' R2 h7 w" p9 I/ p# r9 ?) y
clrscr();' V( J7 t M! B2 Y- D" m% O2 c
printf("input number of person: n=");! b8 s' D: o! o' k |7 o
scanf("%d",&n);
; @) y' v- v& P; r' B3 Bprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只- u& S) \) ~: e( `7 O E
scanf("%d",&q);( ~$ k' B3 O* S$ F* t8 l- }! I
p=num;
W. g8 t: u" x7 M- v- q: ] for(i=0;i<n;i++)
5 S% G6 i) S+ W *(p+i)=i+1;
' p7 r7 y1 D; q0 | i=0;5 u4 j: k! ~ t/ o, n$ Z0 O/ X
k=0;
% \. J) J3 r; A# D m=0;( a6 g- I' t$ ^: J2 W- x
while(m<n-1)
+ B' Q! v9 Y/ l. V2 B5 m {if(*(p+i)!=0) k++;
# x# u& g* U* | |2 Z4 g if(k==q)
1 F- i* }1 U- ] { *(p+i)=0;
! J# v7 u) `6 q7 _# y' n k=0;9 g# ]8 V& o; C8 _3 e1 i3 t
m++;
) X* t3 G! K7 I# n! T }
7 Q& }( `$ C# e: b& s0 n$ | i++;& a4 N! }4 G; e5 R' B
if(i==n)i=0;
) F) @* S6 D3 d" Y0 k) ? } [8 @' _3 D- r) N- |
while(*p==0)p++;
d& b9 O( e% I4 W printf("The last one is NO:%d\n",*p);' G, a' X+ P& n6 h
getch();
8 _/ Y9 K+ P. N1 p+ z
5 U2 ^1 ?. H' t6 C* B2 W' |} |
|