|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ Z$ ]# j2 b& G, x7 T这几天我在忙着编一个问题,我用了一种方法编出来!
; Z- a W* ?# }但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- N5 v+ o- x6 J: H) q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! X4 M. o& R, w6 h q# c. J
- E+ v$ h2 q$ D# D2 I# r6 ^
" F8 \8 D0 Q& b1 F, p 题目
+ Z4 O- h9 h4 |; Y2 y% C0 \山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
; p5 N: L0 ? o4 {+ S7 `# d第一种方法:利用循环链表- G+ A0 @0 e, A4 g, U- a; _$ `
#include<stdio.h>1 p( a5 }0 j' e. r9 M7 L3 u
#include<malloc.h>
r1 p& u- \! x9 j#define M 8 //共有8只猴子
4 N' k' j7 B/ M5 c: t* |$ O9 K- ~#define N 3 //数到3只时退出第三只
* B! t5 O8 ^* C2 ztypedef struct monkey
8 l' w" c* k4 H{int number;
^7 L6 `. ^3 A2 }# Dint flag;
6 K( h+ J) |/ v; l4 Z& k$ Pstruct monkey* next;2 s% {% V: _2 `) y7 c" X; R
}MONKEY;
- s0 I0 x1 U4 E# j( ~- E* G5 amain()3 {1 o. Y: s! j& k, ]
{ MONKEY *head=NULL,*p,*s;
3 B( {( ~" v: p' F int i,sum=0,count=0;& V! e+ V* F) c
clrscr(); //清屏
. f1 G! ~ i; s2 J p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
0 Z" r) Z' }6 z$ Y4 N) b p->number=1;p->flag=1;
) o9 y6 c4 B' |/ V% X& { p->next=head;! o1 y u# t* n& a9 L2 u
head=p; Q+ M5 l2 t3 s
for(i=2;i<=M;i++)$ `* I8 s- ^$ M
{ s=(MONKEY *)malloc(sizeof(MONKEY));
. D0 w. r2 M ^8 S s->number=i;s->flag=1;1 |, S- {3 K* D0 \7 E, x W
s->next=head;9 p) T+ `$ A! A
p->next=s;p=p->next;
" i, h- k" ?# e/ i }
9 ^" n! i# s8 k* p' H& }) Q p=head;
* E) o! x$ |9 T F7 c/ K for(;;)
5 D1 O7 H% z$ {) q- G {if(p->flag==1)& k7 b/ T+ m( F2 S
count++;8 M& f# T3 P& {3 E- ^
if(count==N)
+ d4 f/ H0 Y& q {p->flag=0;
2 G8 f+ ?" h. |2 f( c9 p j# } count=0;5 G) q% a% c: m; Z( `
sum++;}
' I+ G' |; H8 ] if(sum==M-1)
$ i) c6 y) w0 [9 P2 a break;
* k! K' e' E. \1 D5 r7 k p=p->next;
% h; A5 X% a# V8 S }
0 g5 d4 n( {- s p=4 v( v% Z0 Q) I% T8 W5 [/ c2 e& @
head;/ I& D5 M( y/ y5 G
for(i=1;i<=M;i++)2 u2 w. a( {6 n( F! r
{ if(p->flag==1). w& u+ g4 s- N% N& y
printf("\t%d",p->number);2 H$ Z& R) X# F; Y
p=p->next;
6 a/ x3 u& X6 c k/ n }
& o6 e9 c9 l1 ?# H7 m
$ ^( U0 f2 S, `7 E( C6 o* D7 \. W4 D! f b) z* I; r
4 _( g/ d# w; l' v
} + ]! ] i; _$ J
第二种方法:数组0 }9 Y# D: {7 ?% T6 [
#include<stdio.h>
' Y& d0 \" w" i6 _8 i- t#define M 8$ l" D, E. Y# Q- S! u) i
struct monkey5 m, f. z4 Z) a* Y/ h0 A
{int number;4 \& V6 ~& e; ]% o- b# Y
int nextp;
+ i6 n, C1 D8 D' D/ V( N}link[M+1];+ u4 C; d2 |9 S* c" M5 P
8 Y# M# C! j) `5 l; L: a. Dvoid main()
* l" p4 }! E/ I( d{int i,count,h;
5 o4 y: d- l6 C1 Qfor(i=1;i<=M;i++)$ O+ _7 O; i' q, f. z2 I
{ if(i==M)' T7 p* m* k7 a" G$ g( _' X
link[i].nextp=1;
: X+ o+ i$ ^4 N( J4 ] else8 N+ H7 l( U" {5 _! Q4 ]) X. W$ L! R
link[i].nextp=i+1;- j/ W# S- j# |( i$ i! j7 ~% z( e: P* {1 O
link[i].number=i;0 @& J5 ~8 f% S& f/ F
}! y6 U. B& i) O: v
printf("\n");
0 l6 A: F* H0 ucount=0;% \* _3 y4 J1 {" I8 I/ J4 b5 b' g
h=M;
+ Y9 ~( ?- U8 bprintf("依次退出的猴子: \n");
/ P6 m# i% V* U/ E! Y, {8 Y* zwhile(count<M-1)9 w! a) H f' b u t
{i=0;
' @+ d/ M7 s& O7 x0 H# Fwhile(i!=3)% U" M' k$ v9 Q
{ h=link[h].nextp;
3 V8 k( Z( @7 |6 r6 E9 r if(link[h].number)% |. S# C4 C; h# d: G( v3 t4 S$ j
i++;}
* D3 f C( J4 Q% \& x! J U5 X! F* _! g
' E7 \8 k4 Y- Z" \7 eprintf("%4d",link[h].number);
* J0 `5 j" n N% W3 Dlink[h].number=0;* P6 S; W$ g* K' a1 c
count++;
: }6 u2 T. s! G- d7 d$ h9 y; [}/ Q! M/ h( f+ S: W
' z( b7 w+ i4 I! Z5 D$ x: k8 m! ]printf("\n大王是:");
, }, \2 D- i$ ~- s( r for(i=1;i<=M;i++), b3 j# a V4 O" u; [3 w: U
if(link[i].number)" i& |3 i% e; }& }7 a+ \
printf("%3d\n",link[i].number);
9 ?( I: W" c+ {% v
" y4 g- g0 V5 ~4 A3 q% |. @* ?
1 h) O# q8 R" ~0 b* H0 P} . Y: z. |$ ]& z% Q1 y
第三种是普通方法for循环
+ n+ p' J( W7 g' q#include<stdio.h>9 \$ Z% l; J4 b1 K, L% H: L. ^2 O0 Z
void main(): R$ J \/ k }& s
{ int i,k,m,n,num[50],q,*p;0 S$ K, t4 y$ ~9 E
clrscr();
# o7 o" L0 c$ e4 _( _ printf("input number of person: n=");9 X- a$ r; w/ o3 A
scanf("%d",&n);# Y& O' ]! \4 i" {# x( J: P3 a
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
% V& H+ g: F x" U/ m/ N scanf("%d",&q);. ^# f0 ?! A4 m, g
p=num;
+ F g( U: y2 N for(i=0;i<n;i++)8 x- X8 p( E1 p. \* B( a. |
*(p+i)=i+1;4 U5 n# _( g/ b6 _) ]1 E
i=0;0 O4 L8 P# B2 Y
k=0;9 ~; L' A' k0 x' a( T( o0 }
m=0;
) B5 q" j6 v, Q& K' N4 ? while(m<n-1)/ L1 V. }! \9 x/ R+ I/ y
{if(*(p+i)!=0) k++;9 A2 P# ~ R2 }$ U- x
if(k==q)
3 E' D9 W1 j; z6 c$ S2 [- u { *(p+i)=0;
6 K1 z8 I2 o9 ~! y7 ~8 F; \2 N k=0;
7 e# f8 X$ k" X% |' C9 i" a' _( R m++;
' |- w/ l+ v F/ D& }1 g# D }/ e) K. a# H, ^7 ]# a% ^8 j/ m
i++;
: H! a$ R# [. z" @1 t1 @ if(i==n)i=0;4 v( s+ S0 `& G$ L
}6 |% i3 u' t; N9 M5 R! S
while(*p==0)p++;
" |9 a. c# R$ m2 T, @" U; | printf("The last one is NO:%d\n",*p);; g# c4 P+ _ J U
getch();
8 Z8 j x" ^5 A1 @9 u* v( I- g* b/ b
} |
|