|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
- ]% f8 k: ~0 c0 \ _+ N这几天我在忙着编一个问题,我用了一种方法编出来!
) ?3 n' U, D! y5 ]8 P但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
! E- w" c9 Z6 D) N5 J- E注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( e" A; ?; S" ?) ]* Q
$ k. e0 G- ]3 B8 |9 M) }# }8 h- j, }0 L5 M% A& Y/ _
题目
$ y9 f# D4 w5 k山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
1 _2 n7 f1 D' X0 e+ [' c P第一种方法:利用循环链表! @/ K O* P( [" t; e# s
#include<stdio.h>
* j" ]; ^( m! r( q$ S#include<malloc.h>
3 T9 Z6 ]' {: G. M7 h: S" H' h: S#define M 8 //共有8只猴子2 x( E' `' ^! @$ [
#define N 3 //数到3只时退出第三只
0 @- H% X9 @) H6 c( W' Vtypedef struct monkey
& S0 e6 d3 x, U, m7 t- S0 I8 T{int number;# z& m5 c( U1 p+ h- e
int flag;
" `1 l1 w; s8 Y) p( B5 Q8 _struct monkey* next;
) \, _2 H# B# U7 n" y' I0 g+ @}MONKEY; T1 x$ ~, R) F
main()
' X# g+ m: h) A4 p# A8 U; _9 \{ MONKEY *head=NULL,*p,*s;
& p1 F" Q6 I, Q6 ]" | int i,sum=0,count=0;' |; x; C$ Z; F% J. t
clrscr(); //清屏+ A! g3 V0 b% E& Q
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
' D/ M. w' a7 F1 \+ w0 ` p->number=1;p->flag=1;+ L' u# n6 x9 u) B( e% r
p->next=head;
. C2 f8 j* Q1 E. i: {+ U, a" Z head=p;
1 v! l3 R. C6 O for(i=2;i<=M;i++)' D2 v+ `9 k+ }3 M6 ]* ^) R* }
{ s=(MONKEY *)malloc(sizeof(MONKEY));
- E! y* ~8 w# Q6 k& `% J s->number=i;s->flag=1;0 n! m+ m+ h$ F$ F1 J1 T; `
s->next=head;
) A9 L" P: _3 r/ g$ f. N T3 D p->next=s;p=p->next;# q5 ~- T5 e' ]2 l; ^, ^
}- h s- R0 x7 T V+ T" A
p=head;3 L% z7 w [" v9 u# }( r e' X
for(;;): u9 m: U# E3 {' a" M, `1 M/ B ]
{if(p->flag==1)/ {& k! ~5 ]# @
count++;, V* v$ g. l: U
if(count==N)
+ N+ w& q% x$ \8 n& p6 l {p->flag=0;
D2 _& V# K( _ count=0;
& P, s8 x. O8 G sum++;}
: o9 M5 v- e0 X2 { if(sum==M-1); H! s' Q; J2 y8 w$ Y- k
break;! T' O1 f8 K' N
p=p->next;! E. U" W3 t0 c* i |$ P
}
, w9 _& c% N3 I- p+ x3 r p=
' F& v# K6 b9 C9 Y- I head;
+ v/ `! x' U3 B for(i=1;i<=M;i++)" i! e6 p7 H/ x$ P
{ if(p->flag==1)7 \0 ~8 w. j3 T: u6 r
printf("\t%d",p->number);
, E* d# b4 A% R; } p=p->next;
0 l' V0 M: e' \ }
) c. `% I: X5 J; R! |# T* D) p
6 I1 U* C8 |" g0 L
) `; r2 F8 Y5 c' d7 q( O1 F% y; ^- q6 |
} ) J2 Y! `* }- a, h/ t
第二种方法:数组
" g0 ?0 W4 Y4 w#include<stdio.h>
$ P$ T8 w5 X1 Y7 y% |#define M 86 e! r+ w0 |. T' L; C: Z
struct monkey( g; c) q1 m- v! m3 ^
{int number;
7 ?% ^1 r0 ]! |. e9 b- b1 Pint nextp;) _1 a, n3 M n1 q% f
}link[M+1];9 S9 ^# }% ~( I) H
/ _7 T3 A- S9 [2 h' ~; e5 e# f( Dvoid main()
0 v# K2 B) R9 j; a) W( p% u, q{int i,count,h;9 Z. f5 t6 W9 ^7 h3 \- Y! W
for(i=1;i<=M;i++)
7 Z7 I# A( G( E. ~{ if(i==M)7 j9 n2 \4 e( V
link[i].nextp=1;
! P! y, R( L- S5 e: o) N else
/ V0 h/ d3 s+ R6 \* r" c, V link[i].nextp=i+1;
! J/ }. i/ p- I link[i].number=i;
+ D( B- @1 [& F}0 Q: O! k: C" h) N' G
printf("\n");
# z8 D* R: n! R4 W7 N5 T- xcount=0;
# g+ B2 T( y7 [' Lh=M;
- c$ ?& u# P# K0 y3 c2 zprintf("依次退出的猴子: \n");
) F$ J5 D& u3 O) U' W/ ~while(count<M-1)" Q/ s1 ^' e# J+ i' j( b
{i=0;
0 Q3 x% W: h; G7 n+ t8 }1 \2 @, }while(i!=3)' A8 _& R3 V8 R
{ h=link[h].nextp;
6 g$ b& F% o- k- z7 [2 p# l if(link[h].number)
% X1 d9 p- C, l$ i- o* N) W i++;}
( M5 W5 \# E; U/ |2 B/ p3 _& `- N* {
printf("%4d",link[h].number);. ^4 f! x6 h5 d8 _+ ` }
link[h].number=0;
" m2 h; h7 ]8 v& {) ocount++;
5 W& F2 s% E$ L, Y. c& @- a; G' _}' f) o$ @# k) a# S( E4 s. a
2 {7 s0 e+ h7 d6 }8 _* h, a2 gprintf("\n大王是:");. t0 a4 x/ t: l; N2 F3 n
for(i=1;i<=M;i++)
2 O# h8 v$ E2 L! O if(link[i].number)
7 X9 w" ]: N W1 d3 K0 T S3 W+ y( U printf("%3d\n",link[i].number);/ B! F9 o: I8 R+ G$ L# F3 l
1 ], s& w- c! ~, L) A5 d! ~; P- _. c4 f
} ; O# p8 ^$ Y7 h: Y
第三种是普通方法for循环0 ~( }" J, [; |' Y8 {
#include<stdio.h>
( f4 e; F& p* R% o' y7 E. qvoid main()
9 `' g$ S) {2 z" d{ int i,k,m,n,num[50],q,*p; E2 a" o6 W) g$ @
clrscr();
7 Y, W4 G" G/ e, h) C5 ` printf("input number of person: n=");5 `. C& Z. O. m
scanf("%d",&n);
4 V7 _6 X- p% I9 c1 e8 Q2 Sprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 L) E! D! g0 F! g8 r scanf("%d",&q);0 p$ R6 M2 A, H( T
p=num;
0 p6 H% W, M2 t0 ~5 @1 Q for(i=0;i<n;i++)
/ t7 y2 l& A) l9 T *(p+i)=i+1;
1 i. v. k+ c: S c! R3 R4 M% o% { i=0;) L4 ]$ d( |/ I: q- r) E) K6 Y
k=0;
/ T. O7 p6 t0 K: [1 a- ~7 ` m=0;- n; K" k. `4 w: R+ m
while(m<n-1)$ O/ c; s9 b' V( `! `# L
{if(*(p+i)!=0) k++;
9 r/ o( ~! ~( u. R if(k==q)- u# D4 ~& ~3 s' ^
{ *(p+i)=0;
; y- Z) ]: X! |9 j$ K k=0;
" b+ |$ N2 H4 [* K m++;$ x- W2 |6 N% I( i$ |1 W% u& S
}
/ ^' e5 A: A# Y$ E7 X i++;4 \ s! O+ d" X4 y# w6 A1 K b! c
if(i==n)i=0;
$ v% U5 }/ @# l* A9 S0 f* l }4 ^) s8 O; F) Y; c7 x" ?$ V% F
while(*p==0)p++;3 K$ \! F; d! |- X9 d6 i: S
printf("The last one is NO:%d\n",*p);
' m' ]6 @$ B1 T: x8 L9 L6 w getch();9 W# z" q0 R. P n
" w. E! ]4 j, w! l% w* z/ L
} |
|