|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
7 K# F6 w; [+ A这几天我在忙着编一个问题,我用了一种方法编出来!
/ Q' J$ X; O& ^$ x8 Z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
+ J, |& M8 j; N! w- Y' e注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
/ b: v* s5 D6 c: p
1 m5 ~( V5 S/ S8 C( g6 U4 n4 f- l R
题目6 x# e, D: D, O" X8 ^
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
: E' E0 j, E% s4 Z; }第一种方法:利用循环链表
( {: S# [" Q5 q( `) _: F#include<stdio.h>
5 z( [9 k7 e4 r t7 j: I#include<malloc.h>
* E6 }. l! }/ `* j: |8 B1 ]1 W J#define M 8 //共有8只猴子: ~ P+ m3 i3 \( T
#define N 3 //数到3只时退出第三只
8 t6 L, ~# N5 q5 ~( [! i' atypedef struct monkey
- I- r2 U% M# e$ E{int number;
* |5 |7 w J! P5 f+ p3 w' zint flag;* O+ B2 H; ?* l- s/ l; |7 ?
struct monkey* next;
# r0 \9 ?9 e- G# X# ?. X}MONKEY;8 [6 `7 y7 F. n
main()# s; G1 e" s0 S" K
{ MONKEY *head=NULL,*p,*s;
4 @) Q9 E7 y9 G% u int i,sum=0,count=0;! T+ l. H' V7 U ~
clrscr(); //清屏
5 e G! [7 Y4 \* T2 d! a/ e p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
2 x. m% H6 M$ R3 G p->number=1;p->flag=1;$ d% U- C* s0 |' Q6 g
p->next=head;
) G3 w' m4 ?0 o& r) U head=p;
; I1 p; Q9 P# B6 e5 s for(i=2;i<=M;i++)
6 }7 E: w5 R: v3 M2 _ { s=(MONKEY *)malloc(sizeof(MONKEY));
U) E5 u( H. Z' s8 ~$ o s->number=i;s->flag=1;) a9 b" i6 [/ h3 e1 \+ b
s->next=head;9 E9 U0 J% U1 Y: ~: L/ ]
p->next=s;p=p->next;
+ ^/ l/ ^# F! a4 c5 f }
0 o }+ d {( d4 h7 G8 ` p=head;
, Y, e" I( I, J U for(;;)
5 u+ m, u @) L" t2 J3 ~ {if(p->flag==1)3 H/ ~8 g& |* C
count++;
: L6 Q9 y1 `0 r: i( } if(count==N)
8 q5 \2 Z" A! U3 }5 b {p->flag=0;
; r! j5 Y _, u1 H; @ count=0;' b) {: r2 D: C% {
sum++;}% A' r6 z8 E3 ^. Q! p% }
if(sum==M-1)
0 h( n! l/ f% W* v) { break;
- W0 V. ~/ v: u6 S p=p->next;
- O [* v$ I4 J }6 P* M( l& \* O. L2 G$ s6 i% J
p=5 z0 J7 i+ M- [7 A
head;
7 G* Q& `& p1 _: I" F6 w' h for(i=1;i<=M;i++); x7 w. u( `" e" X
{ if(p->flag==1). u3 q) X. ~6 m' ]
printf("\t%d",p->number);* v! c! _+ T) W ]# `0 A
p=p->next;6 e7 V( W! ` x
}
@6 z& f5 }6 z3 m7 q# @. B& X0 g! u1 P% @4 b! N
6 B1 C1 z8 x7 s
5 x5 {! t1 k% J
} . m% h+ Y. J3 w: k) O
第二种方法:数组& B% o5 h6 G% y; B1 K
#include<stdio.h>- F3 i8 A9 L7 T
#define M 84 }3 B8 @4 z/ _$ N, _3 U
struct monkey
1 b% W* E- }/ A p. @) r$ x2 [{int number;
) T( X9 ~8 w! t/ cint nextp;; [4 e- P u; y9 M- w N
}link[M+1];
' q# _) v2 k! H N8 J( k/ ?6 A, B; |2 `9 I7 |6 M
void main()
' n2 f4 l( x0 m# x{int i,count,h;
+ K8 O0 F2 g K# jfor(i=1;i<=M;i++)
& {. l% f3 ~5 s2 P: y* h/ o{ if(i==M)( G3 G/ r$ n" T% I
link[i].nextp=1;
4 a7 j- ^* O( C2 h else
2 P9 r& `2 i$ z% `' a% I link[i].nextp=i+1;+ C- m8 ?4 o0 l% B
link[i].number=i;
( m3 u g2 E1 u8 j1 d9 e* t}" Z Z) I$ h" P( W& ^- y/ @
printf("\n");
4 P" O) q- E8 V5 B. C+ x' Mcount=0;, I5 U- `" d" f+ Q$ d% ~
h=M;2 t( u9 @1 I+ k- s# n3 P2 ~* K
printf("依次退出的猴子: \n");
' P; i- s1 V! `8 z, L- h4 D( s! zwhile(count<M-1)
- @" c) b4 H7 _1 z5 `, Z{i=0;/ _6 }' u' b, k6 o+ L0 I: R/ \( W
while(i!=3); G" H8 r5 O. p: Y, q
{ h=link[h].nextp;
+ e2 O- {- y# [/ r& I# [$ j. n if(link[h].number)
2 S% f/ e, C8 i) }& i i++;}
: {" s. s4 [) _' Z6 `' F8 u+ I0 P8 P7 z M; Q
printf("%4d",link[h].number);
+ x: j5 ]' Q& a/ h$ X5 O5 j( x6 blink[h].number=0;
' C* p& ?0 c1 n* acount++;
0 y' V+ n- ^" `) ?7 a1 t}' \ f6 d* Y$ }/ k. l
0 s: I. Z G! o t( f" a8 b
printf("\n大王是:");
1 e. o) l. y/ M1 z for(i=1;i<=M;i++)# ^) T; v p( \) {" g9 U1 Y
if(link[i].number)
8 o8 o/ i! {# \& f printf("%3d\n",link[i].number);* w# C# g; x" _+ n
! P) l. ]/ k( R2 ~1 k4 B% u+ a2 ^, {& l& `" j5 f% D$ w
} 5 _) h6 R1 Z, ~0 D# z6 y) x
第三种是普通方法for循环* o/ w; v& h1 X
#include<stdio.h>/ b; `7 V, W1 s; S5 D j' @* t P
void main()
7 X' t9 U0 i9 \$ N# S3 S) Q, }2 O' \{ int i,k,m,n,num[50],q,*p;1 L2 K, \: x' z; l
clrscr();
* U" ]9 h7 G# {& n: u A; E printf("input number of person: n=");
% K# H2 _' x9 r( k4 D( A scanf("%d",&n);
[1 i/ P0 v5 o! F# r$ xprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
, i4 S+ i1 s; }) i) ? scanf("%d",&q);9 a& a, Y% Y' Z; K9 L0 r1 j/ L# K
p=num;
1 s6 i7 H! M) H/ x2 Q9 Y for(i=0;i<n;i++)
$ E: t& h0 n& N9 @/ u" v *(p+i)=i+1;; F* W, Q5 }* N" r6 y. ~& u
i=0;
& v$ k7 M1 t w) C5 b% O k=0;6 Z8 i7 i Y7 s" Q3 @; x
m=0;- b8 g" e# Y, L
while(m<n-1) N: N5 Y0 H7 R, W! S& V
{if(*(p+i)!=0) k++;, {2 l' l: `' E0 G! V( B* G
if(k==q)3 L0 A$ j: A& ]9 S' ^
{ *(p+i)=0;9 G$ K& M3 B. j, i, D8 A
k=0;" f$ \. t" T X/ |( L
m++;
2 c( k# y- f. x- O' F5 y- L% F% t }
6 c! ~3 V. q' i9 ?7 ] i++;1 t9 k! t$ U$ g, m, s8 [
if(i==n)i=0;
1 }4 O- h$ i0 T3 t% M }& _$ v( o1 L; w1 O. V# U
while(*p==0)p++;7 `! b* p, @* P- ?. K. h# O* X' j
printf("The last one is NO:%d\n",*p);
4 b4 ]! F% V5 s( H& \ getch();
: t4 \% Q5 c- s2 k1 S1 U6 B1 O0 j. r
} |
|