|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
3 F2 Q6 H1 C3 ]+ Z5 |$ X! L这几天我在忙着编一个问题,我用了一种方法编出来!2 d# w# V4 E, h1 a G6 U! c
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
/ Z8 e. u1 u2 g# `2 l0 ~6 y注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 0 D; f: V2 B) {* I3 U6 ~
& [+ |1 S* j+ [0 q( h6 f) M1 v, \) p7 W0 x: f: j" i c+ Q; S% \0 j
题目$ } Q! {( U8 j2 g- ~. j$ S
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。6 b: [( F0 V# x
第一种方法:利用循环链表' j- w- s8 ]" O3 a1 n
#include<stdio.h>
: q) M& q6 [6 R0 L. H#include<malloc.h>
. Q! s, Y8 a# J9 O#define M 8 //共有8只猴子3 |- |5 @/ r& [8 V' T
#define N 3 //数到3只时退出第三只
# q0 _# m0 Q! F, ctypedef struct monkey, t3 j. T K J. ^; M* v; H. S
{int number;
& e( p t; g4 t& q, b9 {int flag;3 T- o/ `, n8 M+ H" j& K
struct monkey* next;
2 d) W/ r/ ^& S! q}MONKEY;
5 C' N4 D4 [' j5 amain()1 }7 @; Y& A5 Q& U
{ MONKEY *head=NULL,*p,*s;9 ^" N) ^- t) Y ?/ ^
int i,sum=0,count=0;5 ]# j% }; ?- s) [
clrscr(); //清屏1 B5 B6 p; W7 W) i
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
* ^# u$ G# T) W2 S7 j p->number=1;p->flag=1;
. \$ t0 h P* k& t4 b8 m p->next=head;
2 O5 d" D% c+ O/ r8 F head=p;2 F) l' E- k9 M& r; g, }* ]9 S7 t
for(i=2;i<=M;i++), |% O0 q0 P, L+ T5 \5 D9 Q f
{ s=(MONKEY *)malloc(sizeof(MONKEY));
, |& A3 x6 f) P% t/ ?3 G s->number=i;s->flag=1;
3 L4 N4 O; y$ U s->next=head;
4 F- A4 d( Q4 @+ T6 b. [ p->next=s;p=p->next;
! \: U2 E% o! C( ]$ d$ l }
& `# d2 @/ \( I( a4 c p=head;
- S, K1 _! i) {/ w1 O for(;;)
8 W3 k4 U, V4 h- @0 ^/ p; y/ } {if(p->flag==1)
# N: v: Y) y0 C3 W count++;
! f' ~: d( y d; k- k if(count==N)6 }+ n. x) }. s
{p->flag=0;: g2 ]+ M: h3 V% s. ^2 [
count=0;
, Y8 I- B4 D8 ~* } sum++;}
# z+ X5 Z& y* O' G* T- k if(sum==M-1)
8 |. N- {3 f6 G break;
: E R+ ?# Z( L C5 z p=p->next;, v& @- \9 {" x
}6 `+ o4 F7 I* ~, V8 j9 L" r5 D; |
p=
$ ?) m p6 T# J/ u head;) ]. ]1 S. X. K0 \; e
for(i=1;i<=M;i++)
' P0 r: k* E/ y$ d4 z$ C$ u: y { if(p->flag==1)$ z. ]* s, F0 Y9 B+ t
printf("\t%d",p->number);
+ K7 d) j' E( o0 O p=p->next;
* z0 r% }/ k3 N! X2 C }* U/ e, |# R8 Y% v: N
( j5 P Z! v! ]6 i/ }
, y- L4 I6 x( n& g# u# |
/ z& I6 [6 D6 P C} ! s7 E D j/ o7 P$ E8 Z4 |4 F
第二种方法:数组; E2 |% z- b+ h5 C
#include<stdio.h>
2 l$ B1 H4 T/ G#define M 8# t9 o; F0 G; B: C9 K! I
struct monkey
. y. v" i6 L/ P; ]. T' @{int number;
; a' x( B! e: ]int nextp;
8 V" X" k; T' f* c}link[M+1];
! K% ~( T1 h" m! y! e+ C/ l' O! m& T
% S# s" A% n* v3 Rvoid main()
% I" b$ J% F/ Z2 ?1 N{int i,count,h;
- V. x/ }& \. O) {' ]for(i=1;i<=M;i++)
3 Q) Y9 n8 ]- A+ ~: x{ if(i==M)7 \4 E3 y6 k$ S7 B% U6 ^! l8 \
link[i].nextp=1;
P$ d9 E1 m8 V else% }2 R2 y3 e" t! t' r7 G
link[i].nextp=i+1;+ S/ }: l1 n/ m, m
link[i].number=i;/ f- @% f8 t5 [; H
}
d8 b8 N/ Y$ h: ]/ R- Hprintf("\n");( d% W& Q+ l& T# E; s: b9 {# ]
count=0;# P, m! g; Q' v, T' b
h=M;. F4 F! p% f( L# J, I% T& I
printf("依次退出的猴子: \n");% p: x/ o: O8 g' U* v
while(count<M-1)
k3 k k3 {1 F$ F{i=0;+ P9 E' t# W: D
while(i!=3)
; Y3 k T5 j+ J" b- t1 B2 U{ h=link[h].nextp;
5 L B" l6 z/ [" e if(link[h].number)* Q+ i y0 w9 s; J
i++;}
) e/ o& X, |: ?
. s: T. X* ~9 i6 _3 wprintf("%4d",link[h].number);$ E* N) }0 E! y! b
link[h].number=0;
) |/ `6 Z) }* |+ O jcount++;# A- z4 m1 P/ L3 m
} F6 y) v( H5 P" m$ P) y. J
/ B2 l* U( d3 r4 b' `printf("\n大王是:");. ^2 A# w2 n4 j8 Z
for(i=1;i<=M;i++)! H$ _1 G% ]; `( i% Q8 `
if(link[i].number)7 s y$ z9 v& h+ Y; C
printf("%3d\n",link[i].number);" y# N0 W2 G4 t' `$ W! Z& \
" W j6 q) i& d) j$ T, N. y0 y
% s+ `+ Y2 T# A% b( M" l9 v. g( M& m" ?} ; g" l9 K2 i$ G* a
第三种是普通方法for循环
6 u+ Q3 M$ {- a: |: _! M#include<stdio.h>2 K) I+ \9 z# b: ]
void main()4 @" t% d: E5 A5 M9 _
{ int i,k,m,n,num[50],q,*p;" T+ ?, `7 ?" l0 i: v T
clrscr();, Q, M4 R5 E9 B6 i) V* A8 @
printf("input number of person: n=");
, C) t3 b# u* Y# N) [5 }4 B scanf("%d",&n);, m) @, p/ n2 s
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
' f+ Z3 w' ?# X( K8 W scanf("%d",&q);7 {/ ^1 L. @ z+ X2 M) m0 F
p=num;
* @2 @& O$ J+ H$ W6 M1 ` for(i=0;i<n;i++)
$ c- x! v" `- z3 H* S8 f& }' O *(p+i)=i+1;* m. F7 g+ O h% f5 _, \4 [
i=0;+ W1 C- a/ s8 G- W0 A& _8 l2 f8 p/ b
k=0;% n: e' W( C3 {7 d5 `1 w1 V$ {3 S
m=0;
7 ` u; {7 y3 Q2 n) t while(m<n-1)" ~/ w- b* Z( Y# S
{if(*(p+i)!=0) k++;
5 K s( o- s0 m8 N, V) g' {: c; S if(k==q)% k# B( r, f$ z" L
{ *(p+i)=0;& D) N2 y( F3 \8 S1 q& m- |
k=0;. g" t& ?, V2 ]( O4 O
m++;
4 ^* T$ W) O% j. O* O$ @$ L! C6 D }
9 J8 z4 D9 [4 @1 O2 C' S& q i++;+ w; p _$ U1 T! F q
if(i==n)i=0;2 W! R0 ?; U: r8 `, u; k3 j! {
}) j3 S1 W( x7 p9 ~* w. R& ^
while(*p==0)p++;
+ n- P2 u$ V! {8 N7 V printf("The last one is NO:%d\n",*p);
8 g, _' R' @2 z* l: F- v1 @ getch();: n, r5 I9 ^% v: y
r3 i' N" K' v+ R8 N% o} |
|