|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!: p8 C9 P: r" Q, B( v7 m
这几天我在忙着编一个问题,我用了一种方法编出来!
/ f W0 Y# K, n3 j% r, Y但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
7 H9 b* i6 M% h p注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
0 [4 U/ z- M0 u! t3 @# A9 l( l
1 g( J. b! n6 y' |& E8 b$ L0 f
3 F1 ?9 B7 q) P" j, {; g/ M1 k0 M 题目. F; ^& s' R B. y
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
: c ]4 |# k. W e/ }( P第一种方法:利用循环链表
: s" P: Y, T# A8 q4 B#include<stdio.h>! {* s; {2 l, o+ Y8 x
#include<malloc.h>
" ]0 R/ f, x) q#define M 8 //共有8只猴子
, [- K$ L6 j2 ]# H1 F3 U8 K#define N 3 //数到3只时退出第三只
/ l- F; u a ]( ~ P. gtypedef struct monkey' t+ D9 a8 k4 h x
{int number;. ]8 R, m+ j7 x7 x2 C5 B6 W, p
int flag;
! W) {6 k! p0 ostruct monkey* next;/ t- R' \: ~& v6 [- A
}MONKEY;
: G5 D! s/ c/ p7 G8 bmain()
7 K6 V* T! P) S5 ?1 p{ MONKEY *head=NULL,*p,*s;
" @: a+ \3 B8 O' A int i,sum=0,count=0;
* ]7 ~: h m H2 ^, Z# ]# P; Z clrscr(); //清屏" \8 [9 D" @/ a1 l$ {! ~
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( ^1 t% o2 Q- w& N p->number=1;p->flag=1;
$ J \ D. a7 G p->next=head;5 ~! f/ u6 c, T2 ?0 g
head=p;) L, P1 {& b2 u* g* \5 X
for(i=2;i<=M;i++)8 x* r2 O8 y6 q- Z5 w4 V5 p- } x" Z
{ s=(MONKEY *)malloc(sizeof(MONKEY));
& f2 k2 y6 Q$ a% p9 }8 { s->number=i;s->flag=1;
" R# r" c, a7 Y8 {3 k s->next=head;
) T2 u, K. V/ z) `" ~/ } p->next=s;p=p->next;
! r+ p' x9 o' }) g }
" D' J" ]$ a& Q; D' Q% V6 v7 s p=head;/ h2 J$ F) j3 A' u% Z* i
for(;;)
: l0 q: ]0 U. _. M$ K {if(p->flag==1)5 \* F5 ]1 k" U1 E
count++;* z. m0 {' C$ Q
if(count==N)
b. K! B6 h) Q4 j6 ]3 a {p->flag=0;
8 o9 O c) {4 ]' A count=0;
0 N. y7 |8 c( D( U sum++;}
' B! h/ x% n% u/ w" l' q6 p if(sum==M-1)1 r9 P/ a! k+ j
break;
7 W0 M+ U! P" Q! x+ |# v) z0 B; ]$ G p=p->next;* d) a' {, }( K& }4 i
}
) {0 Q \: s# c: H' x( ^) H! G p=% g6 V$ C V4 h4 e' J/ L3 j ^* M
head;
, S5 I1 @: v) h( h7 z4 K i for(i=1;i<=M;i++)
0 W8 M3 n; S8 Z# D { if(p->flag==1)
. ~$ V# I* P# Z% q9 @. i printf("\t%d",p->number);
4 u p% a A, Y' ]1 h p=p->next;2 d$ q6 a1 I a7 @' E4 C& t8 D
}9 [$ \* Q$ ^8 G* f8 K8 W
. R( V5 M* P5 n9 h: T
3 [3 w( F' N1 K4 R& ^
4 k w! T4 o3 k/ q7 J9 H0 Q! r} 2 _- y; B. p+ k2 e8 \3 |
第二种方法:数组
% o d7 \0 w* F" c4 Q! d#include<stdio.h>( M; Q) y5 c/ B6 ]$ H d: B
#define M 8
) V8 T9 b5 p8 | Vstruct monkey" w+ [" ?4 F# y) d7 |* C
{int number;" I- `! i+ y( S- Y5 q
int nextp;! w% [9 Z3 R2 p% ^: H9 |
}link[M+1];( F& t( A+ V+ ^4 W/ ^. _7 ~
1 Q1 U0 p; H& t
void main()
8 k& v% X5 V. J+ S7 p& T0 W{int i,count,h;
) j6 C/ Y# I7 l- X( V+ R/ P+ xfor(i=1;i<=M;i++)- j% @ z3 M+ Q# r
{ if(i==M)0 U1 M. z% p+ ]- h; V
link[i].nextp=1;
5 t( i: [; Q1 A: p0 G4 t9 k. n else3 g2 |% M5 G6 N
link[i].nextp=i+1;
4 i; [' W! `6 ]; o$ f link[i].number=i;
; C. k- w, q( W) S. {}
3 @" m9 i( W4 M5 w* fprintf("\n");
% D' k: H9 Y+ w; t5 j* s" o# ocount=0;
7 K4 L3 [! j9 o' }% R2 q5 Fh=M;0 b+ C5 E7 r$ t: C
printf("依次退出的猴子: \n");
1 k, {. L+ R6 F; y1 ?while(count<M-1)
) D3 @, ^7 e$ F6 l) h{i=0;
& I8 l# ]3 G9 P q! R6 P5 Y5 r8 Swhile(i!=3)
$ c6 G( g# {6 _/ n; i+ S{ h=link[h].nextp;% y% `* ]3 C1 x) a K! y
if(link[h].number)# x' U' ~, ?7 f$ K
i++;}/ m4 ^% u$ i# R& s/ g' w
# Q8 H* b/ e7 a* d5 W& a
printf("%4d",link[h].number);6 x7 x8 {' t; D
link[h].number=0;( f; J% D @9 r) ?& Z k
count++;- u, w9 b' T) i: }3 E. ^6 g9 |
}5 P8 _: C4 Y1 x6 C
: c% d, ]+ v+ v3 b# @7 w! I0 Iprintf("\n大王是:"); d' P' p' Y1 q
for(i=1;i<=M;i++)+ R k# R4 b! g1 T
if(link[i].number)
& p! z! L% Y9 S, z* b+ x W9 p1 x printf("%3d\n",link[i].number);
3 L o9 G. G2 M1 }0 B
# K1 r$ ^8 {) }2 e- ^
1 _6 x5 C+ J" z" j) L}
( J5 Z6 W# V+ h% `' M D) v第三种是普通方法for循环, e% X$ i5 }2 p- \2 \+ l
#include<stdio.h>
" X# `. Y" \" P E3 G1 f& Jvoid main()
- W' K) t ?' m; @' {6 a{ int i,k,m,n,num[50],q,*p;8 x" s, d9 Y9 A. M; ?, R/ \
clrscr();! N' x# h. z. F4 }3 Q; `% l
printf("input number of person: n=");
$ m9 { p5 b, Y% ~8 c) K scanf("%d",&n);& y" Q! D. a- Y/ V
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只+ E4 Q7 Z1 @( x
scanf("%d",&q);/ v+ L3 S" Z2 O* Z% S4 Y+ s
p=num;0 \# l- V ]% x. q
for(i=0;i<n;i++)
C: m, s; m; {1 B( f" i0 ] *(p+i)=i+1;
$ K, A7 x0 l( i/ H i=0;5 u. }* u: _: I: F: T \1 }0 Y1 l9 Z
k=0;
: k0 D6 e( A- `0 l5 V m=0;
" U; @6 n* D9 r while(m<n-1)
" E+ c& E$ U$ P8 |! J {if(*(p+i)!=0) k++;
" y/ h, x" V8 O! P, ^; C if(k==q)& K3 C w7 L% E2 A& x! `
{ *(p+i)=0;: u+ j% o a3 Z2 V2 E
k=0;+ ~* L9 Z/ i( ]- D" l. e2 y) u
m++;
( D% x% K( G6 F) z7 D0 x; ] }
5 P7 s) @1 `1 T" ^, k/ i/ m1 _ i++;% O. H) y' F! h& h7 E) K* }# K
if(i==n)i=0;
6 I# `9 z7 ?7 D; \6 r, F7 ` }8 r# f8 K/ {! |( T# b
while(*p==0)p++;
8 Q) i2 i2 c4 x: B' ?# [ printf("The last one is NO:%d\n",*p);
5 e! P3 x0 G- F1 r8 O/ o7 B. l getch();8 m& o' q& U9 Y- p0 t; C
! j. B; @! d0 C9 [
} |
|