|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# P4 b; h5 ^9 y2 x9 m
这几天我在忙着编一个问题,我用了一种方法编出来!, a( w, g2 N- f" [ |2 R0 [
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!; Z/ {7 n6 Q, H( i% u7 R
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( k, ?! S! p+ n$ }
8 [& s1 M" {6 s- H- N
" K7 H: I H: \7 b 题目% t4 o7 p3 C' {
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% u5 F6 f2 R/ P第一种方法:利用循环链表( i( Q2 A* d" g: [$ w
#include<stdio.h>
/ n/ `9 O8 T# M3 V- r#include<malloc.h>5 A9 c: a# P8 H3 Z+ N
#define M 8 //共有8只猴子- h3 x) d: {4 L5 n0 a! C. k( V9 m9 r) ~
#define N 3 //数到3只时退出第三只
" N3 i' w n0 F" |/ W* ktypedef struct monkey: m! W O# R, T3 y
{int number;
. Q0 P& r# T; ^1 m* \0 |, Kint flag;2 G- }( K2 a$ H8 s5 N
struct monkey* next;
# |6 U0 [6 f; g; n}MONKEY;# n, V) K9 h) N! h) r n2 j
main()' h5 W7 ^2 w' s# @, t. s
{ MONKEY *head=NULL,*p,*s;' P: g: E$ `+ o- }5 E+ n
int i,sum=0,count=0;* G% \0 H! E' q; U2 }
clrscr(); //清屏
, h# V, n4 {3 o+ B p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存0 K2 A6 e- Z- A f
p->number=1;p->flag=1;
0 u! ~2 u" K1 f) Z( I p->next=head;
m% M1 ~; Y; J3 f! d head=p;( e) f* t% I6 G# J
for(i=2;i<=M;i++)3 \. [* a& ]7 z; v; z
{ s=(MONKEY *)malloc(sizeof(MONKEY));
5 O# c( x0 z+ O5 x/ `" I s->number=i;s->flag=1;
' p( N% s* i W& q s->next=head;, e6 r) C5 x, o3 y* a
p->next=s;p=p->next;
1 q# \: I% `" _ w; w6 ?0 s1 K }; E T K! P6 K" Y- Z
p=head;
& T5 J: |+ m, B% H for(;;); |( I6 `% N! H9 |% L# k& z6 X7 w
{if(p->flag==1)* w6 ]+ `/ M' L
count++;- A& r+ v0 t `, b$ h! e" g
if(count==N) o5 K6 u0 @) i2 ?
{p->flag=0;
2 F) X4 O. t8 R! k" j: i count=0;
" l, B$ t2 V; L, R8 ^ sum++;}8 O0 } W5 Q! P3 z; g) y6 a
if(sum==M-1); y4 e& V* E2 M9 [- A# `
break;. W o8 O2 Y. W$ k3 k
p=p->next;
. q0 F4 d3 R+ C" @! [! P( R* S }
* a- T4 u9 d; B" }1 o p=
) o2 k8 x0 y( F7 @) J q head;+ }4 I6 H: J' m# W3 b) J2 @+ h; m
for(i=1;i<=M;i++)3 v; S6 {3 X6 w3 v( t1 {$ e8 L
{ if(p->flag==1)* b7 j/ v) J" q% X
printf("\t%d",p->number);
; W" m, @/ J" I- X2 k p=p->next;, N. v# b1 T; h! G z0 @+ E& y
}
0 t6 F; M: ~+ ~
& L& a) ~- {/ t9 p7 Q7 K# C4 X+ @+ L E
/ u/ W( N3 N- Q% ]% c9 }* ^% d9 [} 0 Y, K, ^( X% n8 k* f- M- {, D
第二种方法:数组
( ?+ o9 }4 y$ Z& u! `" }#include<stdio.h>/ Q6 ]9 z, e) K' c" N& a+ _( k
#define M 8) @/ X# W2 V& i p4 t! D/ O! @
struct monkey2 s* a, y$ ]' l% r* T y' p1 l
{int number;
, s( `# d8 X) \9 {( ]int nextp;
( U/ @% h& ]: g+ U}link[M+1];
4 w5 c) M8 ^( D/ S% X9 S: u
! [4 l, T3 ]: u" O2 gvoid main(); w9 T: f2 n& Q7 j: ^; ?
{int i,count,h;' G9 a! v* r# h6 @1 w5 X# q* j
for(i=1;i<=M;i++)4 j8 \8 Y( X; [( m( P' ^8 D4 g
{ if(i==M)+ R, F2 S+ y! v. y/ [# _
link[i].nextp=1;- {( \6 Q# M: o) v
else
; Y. d( ?: @+ m' Z7 S/ e link[i].nextp=i+1;
9 ?6 g: M/ `1 C+ F; Q" B( i link[i].number=i;) Q! ]) F) Y4 H! t
}
% E$ Y9 o: Q- tprintf("\n");
/ h: c6 b% A. I- ^! U% ~5 Xcount=0;
: Q/ x9 Q( n r+ qh=M;
* x! t7 u5 P# A* ?: W! L1 Zprintf("依次退出的猴子: \n");3 P( R, \, m3 P
while(count<M-1)
6 F Y d/ |& u2 Y t) ]{i=0;
$ H6 k; o" A( S$ Awhile(i!=3)0 p+ @) m) s; t( \+ P
{ h=link[h].nextp;
0 K* n9 d7 ^# n3 r$ P2 N, q5 f# S- c if(link[h].number)
" T; U2 N! @7 m$ j& c i++;}
: g# e! ~% [$ y4 [$ I6 J9 o7 A2 g4 o/ \! ~. b
printf("%4d",link[h].number);
0 Z; A3 f* i. u( m: q0 T0 r& glink[h].number=0;
5 Q/ d Q7 ^* s \count++;
" F& A5 i; t8 n0 T9 ?}8 J6 O& B) t) B' v, ?- {, g
" N3 g" ?- g# Z& F* ]' dprintf("\n大王是:");
) I9 S! V" j$ T. o& C M for(i=1;i<=M;i++)1 m. t X# x8 G3 w( ^ L
if(link[i].number)7 X! {6 @6 k- p7 B6 h
printf("%3d\n",link[i].number);7 Y4 v! v8 b1 C
' A9 c7 _% \8 ~* F# E
# W/ }" O4 g# t- E
}
' c8 x* i; R8 x$ t+ F第三种是普通方法for循环, M9 s# c/ m0 X3 b8 O v
#include<stdio.h>: Y+ K9 t3 x/ l! h' N$ _
void main()
1 G! e& O! y" h2 X{ int i,k,m,n,num[50],q,*p;
& U! k% G8 e/ ?1 x% T) W, a+ ^; z clrscr();5 m! B& u+ e/ }7 q+ |; Q* h7 v
printf("input number of person: n=");
4 }% S8 o- S X9 K+ F4 e+ h9 a scanf("%d",&n);7 t5 d& [$ s. B6 Q5 c' g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只+ b2 K$ A. s8 p. _7 p% w
scanf("%d",&q);
1 ^ @+ D( V$ n) X6 _ p=num;! \2 F9 [+ }; t
for(i=0;i<n;i++)7 e/ c8 ?' W. w* ]
*(p+i)=i+1;% A! A3 ~: ?% N5 m# R7 e6 C$ _$ C! K) Q
i=0;
8 s$ P4 O5 r3 g! ]! L k=0;
( L$ [- D8 ?" V3 y+ g. y9 n m=0;; m. a9 e/ h& r" z8 P7 l- o
while(m<n-1)' F* n( ^3 Y3 i% X3 c
{if(*(p+i)!=0) k++;
. v! a* V X' s% t m# ^2 h if(k==q)4 H' D, D& i, Q2 Z; z% _, T
{ *(p+i)=0;3 V1 S) [& p8 e- E. Q( t- a' `& ^; H* m
k=0;5 j5 u" N8 @9 b4 Z2 r
m++;
4 N6 k7 }" c2 b' Q" u1 v }
) O6 I7 e. k. {# c6 _ i++;$ ?- ?2 ^0 |. J
if(i==n)i=0;& i H% [; K* N
}4 C6 d& g: R- n& U# Z) v
while(*p==0)p++;
8 _8 h3 Q; ]2 O! o printf("The last one is NO:%d\n",*p);
% U2 y$ Y2 x, D* Y' K& _" _ getch();& S( p; \; k. y$ a( f
& n X: c5 w( A) K
} |
|