|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!) y' u' ~! Q! o. ^+ I
这几天我在忙着编一个问题,我用了一种方法编出来!* ^6 w- f: g# \7 Z
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
! m0 `6 H% m1 H* g- n! e& M9 `注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( {9 q$ \3 V4 }& q" w6 c$ p6 }( ]8 z. g y; E8 U {
, Q$ |1 k$ C& T1 R V; x2 @
题目
+ ~5 q3 n( H1 f k$ I山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
: U; G" S, D! Y; d第一种方法:利用循环链表. p8 q3 n/ W( T" o9 j
#include<stdio.h>6 F; J& q) ?) M. O4 R* O0 e
#include<malloc.h>
% O; H8 d+ S4 k! ?0 ?- k1 V#define M 8 //共有8只猴子
) C. H/ X: v5 F9 C# H' t#define N 3 //数到3只时退出第三只
: c, F9 _% u9 s0 ]typedef struct monkey
2 d0 R/ u! a2 a{int number;3 l" n0 J# }4 @( v; f( ~5 ]8 q/ y
int flag;! A, o& `5 V. D* v$ b
struct monkey* next;
5 j, W+ `# o6 Q3 v' x; O' J}MONKEY;
+ M. s4 g' |8 T: [/ Q* |main(). g. a& e! f$ t4 l" U' u. y/ e9 e& z
{ MONKEY *head=NULL,*p,*s;
. s" u1 D, r# G, B; \2 S) k int i,sum=0,count=0;
( V8 }1 |7 p( J. [ clrscr(); //清屏
2 a: M* d; f, J8 ~7 l, K p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存 C6 }) O* _4 C: s* Q
p->number=1;p->flag=1;
' X, F. @8 H: _( S% f# Y p->next=head;& T+ N( N5 W) n
head=p;
7 Y$ t3 H+ T5 e# q8 {+ _ for(i=2;i<=M;i++)
P1 `& @* o% Y) R# \ { s=(MONKEY *)malloc(sizeof(MONKEY));. M+ G. I$ o( V- o- k) p4 ^$ U
s->number=i;s->flag=1;# W8 m% A- w4 C8 L! i" C
s->next=head;
& a/ w& I3 n! Q+ }. E% L7 b1 K- l p->next=s;p=p->next;
% v- S0 S5 h0 h* b }
2 G/ ^ M$ N% \0 _- i1 I1 v p=head;, }3 q( @3 O/ j3 `5 Z0 ?
for(;;)& l7 S5 `8 ^! Q& ~* q! i0 ^! t
{if(p->flag==1)* O) t; M6 w" b* G( P
count++;
# E) L1 {# b! O0 z if(count==N)
' p& W: G# R! p( q, Q; R( X- q {p->flag=0;
{ l: h. R& c& M count=0;
! H: _, E, C) e0 _: Z1 f) _$ l+ Y sum++;}6 ?4 W; d, Z6 @ n; }
if(sum==M-1)
2 ^9 j9 p* q, u3 K break;
1 m G6 ?8 F! O+ I' c- z p=p->next;% I4 H! l1 K E8 X4 O# C5 t
}2 i* ]/ N0 s! H
p=
: q& r" z$ e# \$ T2 R: F head;
; u5 V8 j) M* U f1 p, D$ o# h3 \ for(i=1;i<=M;i++)
3 @' j' j, O: O- q* x/ v+ i { if(p->flag==1)! O N( }6 H: X) G* m& M0 z3 B6 S) Z
printf("\t%d",p->number);
& Q, Q3 ?8 q8 R0 \' h p=p->next;
( a& Q! k& d9 E+ a6 A }
# u4 f$ j: P0 W. q0 R5 {0 c" S3 h$ O) G6 ]2 g. v
- ]/ t) @4 `( S! v; w$ Z
6 E% g& k1 q% @8 A0 P8 O}
- Y7 A& J0 M6 V. v* N2 w) E第二种方法:数组) ]5 l, V5 D* l
#include<stdio.h>$ o+ g+ S0 e* U4 [* L
#define M 8
& E E3 O4 M" J' i0 G6 xstruct monkey9 F/ ?( n8 ^- t3 _- p* L
{int number;! [0 y$ K* `" \7 g& U: E& u
int nextp;6 m9 y( ~$ b7 }& X3 H
}link[M+1];
1 c( W- H! s- A( K( f
- E( ]. I, l+ `- Svoid main()
+ \, p1 U' d: x6 {) g H. j' {{int i,count,h;. Z: \* O. n, x% L
for(i=1;i<=M;i++)+ v% \7 l8 R5 P) @- c! U! Q
{ if(i==M)& h2 R+ n- _7 O' J4 ^) C
link[i].nextp=1;6 [+ R# L9 \2 G6 Y
else7 m( [) } t1 h0 u3 x @
link[i].nextp=i+1;5 q7 C4 @- F# I% p' X- ?8 K% O, F
link[i].number=i;8 e% G0 v# J y; i S! x% d( b8 R: y4 t
}6 H3 @6 O& [7 J& y/ h
printf("\n");% w g8 q. k. y8 ?. g
count=0;; r5 O9 T% j0 a7 ]+ F2 C! v, ^( @
h=M;
* b2 v2 g- X0 k0 v8 oprintf("依次退出的猴子: \n");3 [8 k) U* ]9 z# F; ^
while(count<M-1)
; W$ \9 ]& g9 c6 Q4 \( P{i=0;
: i, C/ a0 x& F# y0 kwhile(i!=3)( l% v7 p" [1 z% W
{ h=link[h].nextp;
9 G% j* ^' J. ? if(link[h].number)& G9 N2 X) M/ p& ~ u. n
i++;}6 K) G. i' V9 I! F' c+ [0 U
# d+ X3 q- v$ ^. }
printf("%4d",link[h].number);
2 x! V$ s. c3 h" B+ Ilink[h].number=0;+ w. O: @' B1 o* B" T
count++;
1 L' [, t8 Q! D( ?0 I1 d}
/ k8 s y2 J; \# J% r8 z4 Z: c4 d9 m$ X
printf("\n大王是:");/ ]+ g2 ?4 u6 h# D
for(i=1;i<=M;i++)& _( Q3 N; u) z% B5 @8 O d9 l0 x5 r2 p
if(link[i].number)7 h I; R: K! p
printf("%3d\n",link[i].number);0 D! C9 y) A+ c6 ~
, i: }# u# ~0 J; O# z5 a0 {( ]
- y+ ]. F9 d/ V2 U, B) a9 U} 4 o: F( ^& T2 Y8 G m) d
第三种是普通方法for循环
; x8 r( J; _$ O; B9 N#include<stdio.h>
: c1 E6 B: k4 r7 @+ pvoid main() d% S, b' U# x1 v# H% y8 O1 Z
{ int i,k,m,n,num[50],q,*p;
! h. X' T6 y$ O9 w N7 Y/ U) W7 y clrscr();0 ?' S, T$ y) C& X) {7 N% q& b- g
printf("input number of person: n=");
; g# Q( r6 ?& z7 b8 } scanf("%d",&n);
* Y5 u& X# P/ \printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
6 m9 V5 Z9 r9 W8 R8 R scanf("%d",&q);' g- i. _ L8 n# q: P C
p=num;+ a# _5 U. Y: r* E F- p2 a2 J
for(i=0;i<n;i++)! q% e4 v q5 ^! A! b
*(p+i)=i+1;% F( b8 Y% t( E, ?1 J' |
i=0;+ @6 K9 K/ n/ l2 g0 F
k=0;
9 a. X7 l7 k! S* s. ], G: X m=0;
1 {! V. t4 S' G, @ while(m<n-1)
. z# }/ B( T, w+ z8 s; @# R2 B3 ~ {if(*(p+i)!=0) k++;6 w+ k: ?/ l( v; c7 Q
if(k==q)
# d( ]2 }( G5 m { *(p+i)=0;
' n. T1 C2 l" ? k=0;8 h7 k% B6 @6 H" y! a, J! n
m++;
! E ]. J0 {7 L1 f! [ }1 k0 e* n4 t# U& w% f: f& p5 `
i++;
5 W$ ]8 O L3 ~2 H2 N( \4 o if(i==n)i=0;) r0 P6 [! ^( A5 C- S
}
' J7 t2 V# g# V0 w8 M* l while(*p==0)p++;! j6 }$ P7 x# ~5 Q7 h
printf("The last one is NO:%d\n",*p);4 O# |( @1 E1 m1 }' [4 O; G
getch();0 d+ i! ^0 M( d5 [
+ ^( ^6 W- k2 |( F: r9 i# R} |
|