|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 F% H/ F$ r; z5 U: u这几天我在忙着编一个问题,我用了一种方法编出来!" J+ Q! r# ~( t- P9 c
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!& U* Y7 W, R! {6 B$ O2 Z
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
: M' f1 U( R5 ?' h% l' W1 E' M/ |7 g1 n2 D; l; r o
% ^, c2 D) o" L
题目6 i7 S" D/ v: @* o0 `
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
j- Q7 I9 V1 p; y第一种方法:利用循环链表/ L' D) m3 l4 D
#include<stdio.h>8 o0 p0 l- l* k) M- |
#include<malloc.h>- u8 h/ ?9 a& \( Z9 l3 M6 `
#define M 8 //共有8只猴子
; |+ J' W" k! k#define N 3 //数到3只时退出第三只
( i4 i+ d, N8 S8 b* ~typedef struct monkey
$ n, i/ u' |4 z3 {- c8 {) `! \" j{int number;
6 T& \% g$ v: {5 c& Tint flag;
: n7 `- ^ |/ d6 m) v0 w! G5 Zstruct monkey* next;
) q4 U- i" B! @( v}MONKEY;
* `+ n; ^5 [/ i& `main()
! K3 l3 @% U' J. j+ ~3 a" K% v0 q7 h, t{ MONKEY *head=NULL,*p,*s;4 _, z# N( j* C
int i,sum=0,count=0;
" | f! s: V) L4 |0 H: M* p clrscr(); //清屏# n5 t5 e# t' r. k& I4 {
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" E1 V c H3 C6 p4 ] p->number=1;p->flag=1;. @0 @: g$ C2 H( \2 l; C% v1 w
p->next=head;
& m2 X" E' W2 T, } head=p;
( { k" \: e# F5 }' R for(i=2;i<=M;i++)$ y" ]- X, o1 w( ^- A
{ s=(MONKEY *)malloc(sizeof(MONKEY));$ i# |% e0 A- U% V6 P8 y
s->number=i;s->flag=1;2 O7 x# x P' H& F: L
s->next=head;3 g# b7 Q) i$ _( \3 y/ [. P: `! W5 [
p->next=s;p=p->next;
4 `5 {' A& n/ X& N) _ }" U- {% U; v v
p=head;. B& F6 B% [ o! H
for(;;)
/ q6 z* x) f# h7 {0 |+ A {if(p->flag==1)2 t4 p: W( b0 `6 B M
count++;0 h9 ]8 L% m1 ~! M8 O
if(count==N)6 {6 b: ]; I7 {
{p->flag=0;
( a9 e; j& u+ ]* J2 ^ count=0;
- Z$ M4 c" [% _ @0 D sum++;}
3 u2 y; i- ^8 n3 J# |3 F* D3 Z if(sum==M-1)
: \) l/ A; w0 B) A" z- w break;
0 @. s6 s( w* Q+ [6 p8 ~ p=p->next;
a/ f. O! h* _; G, e7 d5 N g9 n }
: h. M7 X# E& B x/ y7 x$ B; m+ y p=
4 [- E# p! d! v- ~* m$ o( u head;: I7 k" ?7 k7 w2 {
for(i=1;i<=M;i++)2 \4 J9 E! m) n
{ if(p->flag==1)" }: A" e9 I7 G3 X
printf("\t%d",p->number);
8 g. {7 V5 M0 ] T; C/ Z" a p=p->next;/ W! C( Y/ b" @- G5 ^: V. |
}
7 h. o" U- c6 `" B* J3 o& N, ~
; t8 U& y7 ~5 j5 ]( C c5 @
7 {3 X+ r/ [1 c' d& q V8 a# W, i5 @: B6 n
} * r! q2 S& m2 k! W# e
第二种方法:数组
+ t! b$ D* I4 w4 }! K0 R3 Q' g9 f#include<stdio.h>
8 e& e5 h0 A- _0 q#define M 8. c4 b( a; z3 V! j/ A
struct monkey0 E: ^1 V& F/ Q0 S
{int number;$ h' A1 c( [* j, R
int nextp;8 [9 u7 L1 O5 u% t6 O' X% O
}link[M+1];8 y' S6 ~8 e3 d
2 R8 |6 s9 \; @; U/ U) g9 n, H
void main()
p9 j2 V0 h2 m4 W/ R{int i,count,h;
. t6 M4 x6 z3 w- Rfor(i=1;i<=M;i++)
( b4 j3 A9 @) B! p/ y{ if(i==M)( o. s" A# s6 E1 _* Y- A
link[i].nextp=1;" ^9 k K: w# P! W
else5 f- U9 L; S: r; d, @! M
link[i].nextp=i+1;
2 r! H* D- O2 o. Q0 K( L link[i].number=i;" n' l% b' d, p8 F7 }
}
0 n4 l& a L$ O% k9 G) i2 Wprintf("\n");
" O: Y- W, V. c6 t( |count=0;3 X( t% Y& |" C0 e! s
h=M;0 f9 @' I7 U' C$ B) d2 Z3 g
printf("依次退出的猴子: \n");- g3 v& X. e1 N, p' b6 D; I
while(count<M-1)
! D: f' ?0 J; s$ ^6 Z' j{i=0;
+ @' u. O, p4 C9 z" |1 ]5 W8 Ewhile(i!=3)
0 P, S( ]% M% I; j9 H/ z" D+ w{ h=link[h].nextp;
% C% k- h: h8 |2 b$ h& {6 E if(link[h].number)
1 Q, o' p8 }& `6 o0 e; Z i++;}% q, H, O8 {$ O) I0 l
- \( F( F6 E. [0 X/ F% tprintf("%4d",link[h].number);( ~% `- q2 ^/ V8 H+ Q$ O, g
link[h].number=0;% @& h; S9 w9 f% ?
count++;
& S2 f, L8 n4 q/ Y/ B" c}5 ~8 C' E0 c0 D1 F$ D
& Z; r' P d" ^& b j% e
printf("\n大王是:");' k* {) a8 M6 S$ Q1 I' [5 Y
for(i=1;i<=M;i++)
, `. J$ d* E1 k$ k& o if(link[i].number)3 S% w+ R# k! y- Y
printf("%3d\n",link[i].number);5 N( [1 ~ S) H' q7 ~
. T$ F8 C% @2 Y! Z; c3 g
8 _% W6 D4 ` z. K2 \}
; K, x5 s, ~# A2 {1 X第三种是普通方法for循环% y2 U+ ?' k5 l" t
#include<stdio.h>
( [0 \1 j" u; x5 }void main()
6 G& R0 Q1 w3 a% c. L{ int i,k,m,n,num[50],q,*p;, b. M, I A* z
clrscr();: O, z( @% s q) F
printf("input number of person: n=");
2 C5 W2 @. T) O8 u; s5 R3 [- J scanf("%d",&n);# `& U+ w2 j) D: r. T( c" |
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
2 K3 U1 @/ e9 u& F5 Z5 v7 V5 Y scanf("%d",&q);
" H+ `3 ~, t& J0 S, k p=num;% \; t+ I. [7 u6 C
for(i=0;i<n;i++)
/ e$ u9 j9 K; d8 A Z* \+ a *(p+i)=i+1;
9 g, M9 v, Q! Q' V4 L8 t i=0;
# a e# A' i- F4 S) U k=0;
1 L0 N4 F9 R: ^: j9 L! y m=0;
w8 `4 N, F. s+ |6 k* N* w while(m<n-1)
( u3 J ~* O( B) j( n- N {if(*(p+i)!=0) k++;
, C9 y3 r+ S# Q if(k==q)
- g1 u+ r7 L- d, y( q { *(p+i)=0;
2 I" g0 [( K# y. g- R8 ? k=0;# w. S4 K5 J y4 v D
m++;4 i5 u) k* W# K: c: h5 h0 T" Q$ T
}4 b$ n% Q0 o- Q2 N
i++;7 F( J% y, D0 e F
if(i==n)i=0;
" W. l9 n5 T: R1 h1 m; {8 p* n }
% l# `/ h P9 A5 n- k0 ] while(*p==0)p++; n/ p N) x2 \) p" X! B2 X
printf("The last one is NO:%d\n",*p);
: `. J# p5 U2 ?/ ~$ z6 S" C8 G' r getch();8 a# |. s, n3 \* v2 x& x
, k: I+ g# b* C" a: f} |
|