|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
& p8 o& e6 Q! n/ _这几天我在忙着编一个问题,我用了一种方法编出来!
9 K% Z. @, [4 t3 H/ c/ z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!; C, N2 n( f; ~8 K
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
, x4 Y* j, e' L5 b9 V ^& }& g( W W1 Y+ k8 r0 u
3 r7 h2 {/ ]( }1 x! {7 v3 f
题目, J; Z: t d- O
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
; I- \% D7 @% Z$ R y4 D第一种方法:利用循环链表2 Y, ^- S% {) c5 t2 b% q
#include<stdio.h>; K( ]# e) A+ O2 L8 @1 I) U
#include<malloc.h>
- g( `4 @( \* l) o9 `9 e9 E% M9 E) @#define M 8 //共有8只猴子4 c6 j4 }8 m7 J' g' u& t
#define N 3 //数到3只时退出第三只
% }0 }% t# \4 E3 `8 Z: Q4 |typedef struct monkey6 V B, b" h U6 u3 x
{int number;, J g6 S; V8 f6 S; Q$ A- J
int flag;7 E7 d9 n! A) i: w( o) P
struct monkey* next;
( i7 T* O6 I. s# ?( K}MONKEY;
% q1 f8 x# T3 L/ q, e4 j2 p! X1 Pmain()1 B7 S) D0 A' l8 I
{ MONKEY *head=NULL,*p,*s;
- P; O& u. }+ y: p) e: d int i,sum=0,count=0;: }8 g! A3 r& D
clrscr(); //清屏
& L5 O2 K' p- y p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存% m1 S }, U' W- l
p->number=1;p->flag=1;
0 J1 c! ^$ k0 B( a9 D# ^ p->next=head;3 f- C7 O* M8 w+ e* [
head=p;& m$ n1 e) E7 u9 K
for(i=2;i<=M;i++)
: v% q( E0 x! o' I; T: f+ c w { s=(MONKEY *)malloc(sizeof(MONKEY));0 z1 W7 g2 B+ D- v
s->number=i;s->flag=1;: V+ i% h# ^( Y6 b3 K
s->next=head;
/ {+ e& I+ {" Q6 U" p' o p->next=s;p=p->next;
1 o! B8 H8 X6 X) X; G. G! N }
& w n8 o0 a0 z' z" K5 I p=head;
# R2 _' l. P: G. E. t for(;;)" R( s9 S- ~+ Z/ a1 G% r
{if(p->flag==1)7 r4 ~6 F7 l$ Z2 |
count++;
; Y: J7 ]4 F5 i1 q) w) q3 i' d if(count==N)0 I& M1 m/ |% c1 R- l
{p->flag=0;) F: E3 i: d5 E% S ?. @: A
count=0;) E/ a( w/ u; Q9 \- i ~
sum++;}
, w. H% u: C" j7 e* ~6 q if(sum==M-1)0 w1 x# I4 y0 L1 t& S
break;
2 Y" {3 K# b9 }# n/ d* V p=p->next;5 [* |) M7 G8 a
}+ U, e" w, f, f0 }* p- x
p=; p$ A. E$ S3 g/ V
head;; k/ ]* v2 V9 D! }2 t, S8 T0 M
for(i=1;i<=M;i++)
& z/ h8 L$ Q4 k ?* q" n% e { if(p->flag==1)
# l7 C; t1 @3 i2 X P0 q; U printf("\t%d",p->number);
6 w/ C5 P4 v6 I# F) {3 b0 \ p=p->next;
9 z0 p5 ^& r& e+ @+ N }
- X, [; Q" p9 w" n% c2 c" l% i* Y3 ^0 g
2 C( E! M9 B. [/ c% v% H- O
0 B' S1 w/ P) F8 E+ _5 ^) u% J. ^
}
$ v8 H9 k* t) f; R7 G% }第二种方法:数组5 @3 y9 r% v; B; l
#include<stdio.h>
- y$ r9 r1 s' |( h#define M 8
3 U6 X& D1 {$ \$ W4 t1 Dstruct monkey7 G1 A8 { z# g: O0 j
{int number;
2 N9 K- a$ p8 K4 K& m- [$ uint nextp; {2 C/ f3 }3 |( n, g% D
}link[M+1];
F. ]/ R& H* J" M I
+ M2 E D+ t9 Kvoid main()9 U2 ~& h2 q# b3 g3 s" b$ l3 H& w
{int i,count,h;
: ~. \6 ?- B7 ^8 h- i1 Bfor(i=1;i<=M;i++)$ ~- {$ H* B# j G! A3 @
{ if(i==M)# G$ Y2 E- c Y7 g0 G
link[i].nextp=1;: g0 y- ]$ _/ X+ G' K$ U: L5 n
else
; q% d j5 h) w8 n# \ link[i].nextp=i+1;
+ E5 }- m& I7 Z+ D" a2 e+ { link[i].number=i;0 f& A+ F: t- J6 q! X# a* k# k
}6 ?4 X& @6 n( u, C3 B2 D/ a! r
printf("\n");+ j2 u5 y: O4 \1 ]' |
count=0;7 u) a2 _" `/ ?) r0 c1 o# y# v
h=M;
" F1 j! V4 C$ l& W2 X {printf("依次退出的猴子: \n");- ?* n) h/ _. X
while(count<M-1)
. P* G: @7 ]! `$ f3 W& V{i=0;
9 }, ?7 M8 G# ^" R' Lwhile(i!=3)+ {. s h' Y; _( P' |* C' _2 J# V4 G
{ h=link[h].nextp;
- B! _0 ^" k( H if(link[h].number)4 N' q) K {# B% b
i++;}
1 Z( z" W% A; x1 o1 N! N3 D# K: O! X4 E/ x4 o* {. g
printf("%4d",link[h].number);" T0 G2 B t! b2 ?4 [7 @
link[h].number=0;
. ]: }: b% _/ T/ \' Pcount++;
& f% P1 f: b4 g}: D1 V( m6 N8 S; q4 S# Z# K
) p3 c( ^+ _' Z% J. x; [printf("\n大王是:");
) W/ h4 H) P* F1 l( [: l for(i=1;i<=M;i++)
' O* S' i0 O+ T7 i8 Z% s if(link[i].number)
* c" g$ {( D. @5 m3 d; @& O2 [# O8 J* M printf("%3d\n",link[i].number);' e; _; o- f2 r3 g X" b
, b2 f# }+ f+ F! T! [3 Q6 u9 ]4 u
6 e0 Q4 _, _5 `- a( T# b; L
} . A7 M5 y B# W* ^5 |5 b
第三种是普通方法for循环 ~: t% v* `' |: A9 U
#include<stdio.h>
3 b1 w; E! M+ Evoid main()
i/ i l! p9 n% j+ J; p{ int i,k,m,n,num[50],q,*p;
) c8 ^% [) r+ ^ clrscr();& l$ ~1 Q. ~# w7 j* h
printf("input number of person: n=");
/ v# t5 m# E' G) p, N7 D* I1 u scanf("%d",&n);( }8 A+ |; \+ G- c9 }; M" C
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只- ~" m$ u/ r% F* F9 ~9 j
scanf("%d",&q);
2 c/ U7 a3 x3 H* | p=num;' c, x% p' y% v0 Z3 |, d9 z2 F- B
for(i=0;i<n;i++)
8 b$ c1 i2 |3 |! `' O- Z1 M *(p+i)=i+1;
- y! Z5 S" i( s( G7 b4 G i=0;0 n7 d' ^$ X; x
k=0;
/ g# I; U/ c& s1 h m=0;) Y8 @+ W# c0 [
while(m<n-1)- `- M7 i- d0 s, u. Q/ `
{if(*(p+i)!=0) k++;6 d* t8 W7 q/ Z; D3 f
if(k==q)
$ a% T; C' m+ ~& N2 x* f { *(p+i)=0;
/ O3 a; W1 N1 U" W' E( D' l5 n! e k=0;* a6 `; r. h7 j2 q5 D
m++;3 Q _: A( ^- h8 `3 {
}
' D/ E% e% Q: ]3 G5 W1 o3 G i++;
# C- U/ Z6 |" L% z( g* k0 w if(i==n)i=0;
. Y( E5 A) j( s( g, n/ n) Y } Y$ d0 v" y4 ?* q6 V; |9 P( Z( y
while(*p==0)p++;; e4 A% s2 M; `7 w; X. h
printf("The last one is NO:%d\n",*p);3 P% Q5 z7 r6 I8 W8 ^( {
getch();( |8 w8 R7 A; C+ `$ U9 s
d# V' h. _: W4 H& D- b
} |
|