|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
6 _& j7 W: R7 x. a+ P- L. |这几天我在忙着编一个问题,我用了一种方法编出来!
0 K7 j$ F4 X% K但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
6 h! M" t: g4 W- b7 S7 X注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
0 Y. w. `6 R# L0 |/ I8 |. u! Z' e. W% w; Y/ N: z3 X, O
% \2 b% @: B9 p 题目' W5 [! H0 A% C5 a; Q
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。# {, Z1 t; q3 ]7 L. M( ^7 s
第一种方法:利用循环链表
* \/ x. I8 w3 r& ^#include<stdio.h>
2 ^, V C7 J5 P" _#include<malloc.h>
! n) C7 I9 T4 _2 n3 R8 ^" K#define M 8 //共有8只猴子
5 P: F+ r/ i' h+ a* w0 ~* t: p$ x#define N 3 //数到3只时退出第三只
& ?6 A' U6 P7 P4 N# \typedef struct monkey
% u' S/ Q2 i$ v% H1 R) B{int number;
- Q9 R8 g0 E. e" n/ ?" ?3 Lint flag;' X3 F! Y" O& q) I. I2 y
struct monkey* next;
3 L5 @( N) l, {6 ? t) H}MONKEY;* w, } h: ^* I! d; ]% b
main(), z: G+ d+ m5 W8 d' w( R
{ MONKEY *head=NULL,*p,*s;8 W ]" W7 n$ d% d4 l- s( i
int i,sum=0,count=0;
$ t8 m* c" M7 d clrscr(); //清屏9 B' {5 N& `$ z# m8 a9 O, f; T
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
4 ]$ i. b& J6 g* y" R% e7 w p->number=1;p->flag=1;
8 {. |, c4 H) o1 U/ s3 p2 K p->next=head;
! ?5 `& J. S; v! W head=p;
9 e# x7 D7 r3 T. T# Q4 A for(i=2;i<=M;i++)
& j5 _( B( y+ a* A1 }# U5 R8 y { s=(MONKEY *)malloc(sizeof(MONKEY));7 p9 g, p, `; w/ }1 {
s->number=i;s->flag=1;' m* u7 n8 T, W3 D# t4 v/ R8 Q$ q
s->next=head;
/ P6 c4 O& y I2 Q$ N+ i p->next=s;p=p->next;
9 G6 Z* W+ j6 L( C; G }/ X6 N7 }! f2 j$ ?* t: b |
p=head;
% b6 K/ s, h& w9 h for(;;)6 H R. e* ` p. ]: }5 G3 F. t
{if(p->flag==1)1 ^9 y: x) Z! ^( O% y
count++;
: @$ s* ~5 K. N6 y* O. t- _$ E if(count==N)& u! q9 ]% p& b) ]" R: V
{p->flag=0;
1 g& D/ r5 m+ j count=0;7 e" h+ B3 r/ m3 z1 b
sum++;}5 m: [2 N' `) L2 ` b" s/ b2 K
if(sum==M-1)
7 v1 z, j: E( C& [# J( r: N5 c break;
+ Z4 \# d G8 Z" E7 T( F p=p->next;% V3 @3 z, Y4 c( O) Y% L% F
}$ ^8 }( l( r: x* u4 o
p=
8 |8 N1 g2 |# ?( b; ] head;6 @- _& ?& b% J \* r
for(i=1;i<=M;i++)& G9 F R- \4 w \
{ if(p->flag==1)
, a4 O; N6 F5 @" Q6 Z- ^ printf("\t%d",p->number);. t4 J) L7 w A9 m2 e: l
p=p->next;
$ R& T" ^8 ~2 ~8 z" q7 F }
5 W( R2 g: p6 v* k" H2 [ g1 C+ v3 E3 r* p
3 r: i3 S. o7 S* v
/ R/ Z; E# L( S: f; G} ( j/ v3 c, ?/ m( u4 a+ `$ t
第二种方法:数组0 M" z7 y3 U: k4 U: J D
#include<stdio.h>
t! a7 B9 H0 s( d) i! s' |#define M 8
% _" k6 `8 o2 T8 Kstruct monkey
4 ~. ]7 S) L9 d' I' H{int number;7 F* i( K. [; ~; x. N7 w9 D
int nextp; }! Q3 }! J* ~) f) i
}link[M+1];
) F9 ^5 X9 p2 M6 V9 o9 |
( W) N8 N, t5 Yvoid main()8 t2 F7 s }$ ] @. O
{int i,count,h;- c! S! f. S2 f7 k, P$ F
for(i=1;i<=M;i++) z1 E9 v$ ?7 Y4 O7 A3 L9 w
{ if(i==M)
" [; w/ Y$ i2 M2 V link[i].nextp=1;, h2 a$ I( m6 M6 z/ s. A
else6 [) X* W) w7 i4 \1 Q
link[i].nextp=i+1;
' g6 B. k" _# d5 l3 x link[i].number=i;# X6 ^+ _0 f0 S% Y, v) g ^& S
}
5 Q W3 K7 V8 V( fprintf("\n");! T6 h$ w. L3 j5 Y2 |
count=0;
( K# i) ]+ k0 ?( p& U5 W% C0 Oh=M;" P; ?2 w- @" i$ ~, z1 U6 ^
printf("依次退出的猴子: \n");7 s# {7 ?1 y/ K" [
while(count<M-1)
0 I) i8 ?3 N0 r I{i=0;! H% V: v5 y3 M: z
while(i!=3)/ ]! `9 `% ^$ i3 Z
{ h=link[h].nextp;. h' A6 j# H- b* ]3 a
if(link[h].number)
# |+ }1 m+ ~9 u7 [7 H8 {; _ i++;}% J2 G @$ L+ W+ j& t
! I; s; _$ q+ M5 F8 `, m' iprintf("%4d",link[h].number); L( G7 M# B+ Z5 u" R" D) _
link[h].number=0;
- i: G+ ]5 D* A; p7 Mcount++;
/ |+ Z b( }* l& [4 p# n}
( _8 Q1 w: w1 i( E; W
2 w$ h: v" o3 t/ ?* `. N' mprintf("\n大王是:");
7 ~; m. D5 I' y& J for(i=1;i<=M;i++)
) r @9 ]- r6 v! F$ {: }5 e3 ~ if(link[i].number)* F0 E- B" W, {6 K' V
printf("%3d\n",link[i].number);
0 J4 ?* a: q: ]( J, A9 H) G2 [9 s4 f
7 d4 v& O3 L6 `" Z" \- `- ]: \' T B; H$ n0 k
} & x' L J; l3 B) y/ u% y5 A) _
第三种是普通方法for循环
9 Q/ r& b# d) n" i#include<stdio.h>5 O$ r2 D3 H, @; I
void main(), E% q2 X: q: N( s5 H j s
{ int i,k,m,n,num[50],q,*p;
1 P: ]( t" j" a" J6 T clrscr();
6 ^+ K* w% y. r+ s7 |' X( a printf("input number of person: n=");# P1 A9 R' v8 N' b: w1 s1 h3 Q8 \4 p$ d
scanf("%d",&n);# ]. P. v# y$ g5 S6 L3 t
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只5 t) \6 _3 ]5 T
scanf("%d",&q);
/ p( s5 a S- Y' ^+ I p=num;0 } K+ q0 ?8 f k5 H
for(i=0;i<n;i++)- e3 @; y2 F! C
*(p+i)=i+1;7 |" T4 ]4 |. J, A2 {
i=0;0 U, l5 a( X: f7 I, m) Q2 }3 j: f
k=0;
4 X5 k& d1 C) u3 L" N: ] m=0;) x' D3 U. t, ~) I
while(m<n-1)
( k) X6 F7 R4 y8 R) t {if(*(p+i)!=0) k++;. X. i) W3 q3 s! J% t3 k/ Z
if(k==q)5 }0 O9 K2 v3 E' `' f
{ *(p+i)=0;7 a7 Z. `$ ?* q1 E; y
k=0;
; r/ Q/ D, N8 X! F1 n$ P m++;; B; D2 H1 N3 K7 z4 V0 d K) _
}
: w" C7 W" `/ c, u/ G i++;# x9 _$ I$ I) s8 W* K
if(i==n)i=0;
/ g6 m$ c+ i. Z }
. w7 J; A6 z# F8 P' J; | [" } while(*p==0)p++;
+ N/ P, {) K! e3 g printf("The last one is NO:%d\n",*p);. E9 ~- r* y8 g2 G9 n( L& u/ p7 }
getch();
' M' G5 M" _+ L% h b
: m" o3 @; w9 u* `% y) \} |
|