|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 S- Q. I6 ~6 d, E这几天我在忙着编一个问题,我用了一种方法编出来!
. `9 c" R; ]) C$ E* z) S但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ h4 X: [; z( F8 Z( q3 G& X, G) Z' X注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 " B# G# w: m8 c4 b$ X* G/ K
( ]6 Y/ K9 F; o$ E0 o7 [5 @2 S
( B6 r! ?7 l% G# I6 I 题目' C% @; u, }& |2 m& f5 T y+ m
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。0 R, n- |9 ~9 ^7 a& a
第一种方法:利用循环链表; g2 E& v, A. m9 D$ `( Y o& r% M
#include<stdio.h>. H2 t. ^7 o. e9 Y: x5 x
#include<malloc.h>( j8 P0 |; T# x! }
#define M 8 //共有8只猴子
8 d% N* e, I4 i; I {: K0 p; B! C#define N 3 //数到3只时退出第三只3 a% w; Q. O/ o& w* e
typedef struct monkey
% [) ?; Q/ O0 Y/ s5 t6 q{int number;! _$ A# ^4 h5 G, |/ `. O5 a" L* Z' ?
int flag;
. s! G* ]6 ~" cstruct monkey* next;+ Y# U! t+ z& D5 n# g# r. @
}MONKEY;# `7 j8 ?& H6 w0 u, V6 V
main()
$ A* B* G3 I- n{ MONKEY *head=NULL,*p,*s;. ~! m' N5 \/ d, C9 {4 R) i
int i,sum=0,count=0;
* T( _4 v+ P$ l5 u4 N clrscr(); //清屏, p. x$ |" j! l& k9 R
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存& ~) g9 U- b4 T
p->number=1;p->flag=1;& s) X) R3 P. D8 z; N# c; y! X
p->next=head;
8 ?! A$ u$ X8 Z0 I8 C head=p;
* [7 \3 z( ^$ ?8 e+ F! f for(i=2;i<=M;i++)
2 O2 V5 z$ J2 \ c7 p7 F9 n+ u$ z { s=(MONKEY *)malloc(sizeof(MONKEY));
. D, @+ f7 s2 P5 I1 ~7 D s->number=i;s->flag=1;
& q) `0 B* ], @* G1 X3 e' \ s->next=head;. M7 T y% W2 C
p->next=s;p=p->next;
- m" R- a7 T# ^2 b: u. e+ b }3 h6 F$ w; t: h& E( w
p=head;
4 G* {7 C- W+ w& F; f7 M& w; o for(;;)
2 {: M9 {# |. U. d7 w& J4 \% r& \7 A {if(p->flag==1) j0 g' }+ [0 [3 N q* l) H
count++;
% d- V M1 n, `; G9 S if(count==N), V% |2 | ^+ v9 t$ A( m+ }. E2 x
{p->flag=0;
5 ]1 w/ q2 w3 q* v6 o0 J2 I count=0;
3 U! q9 d& z' T% B' _8 h+ q sum++;}( I. O! M; D0 ~8 _& }+ u
if(sum==M-1)
# F5 `/ K$ R* z4 J0 v8 x break;
[+ |! C" Q# v0 n p=p->next;
6 Q" C! W& @$ Z& H6 R }7 t* D: R! ?+ K. E" _
p=
! c: \& B$ U, w H5 x head;
4 Q" c! k* w# V. q9 v5 t for(i=1;i<=M;i++)
; e0 T# t3 n* a _7 x { if(p->flag==1)
+ V2 ?+ M0 J7 p# E, f' i printf("\t%d",p->number);
! s- t* y# w O# t" o o8 c p=p->next;3 w9 K6 E. x# x) s
}
7 Q3 @4 a k# `4 z3 B x) |/ B1 }' W, Y$ g. {+ q
3 T& ^- M- O! C6 W5 V
8 I& K- t+ C0 n}
: l# r9 k% D% I- v2 f第二种方法:数组 G7 z" j' U8 x% \; m5 }: E
#include<stdio.h>
* S' C3 @# ` y1 V2 l#define M 8# U; M! ~+ I# d1 w; J: H
struct monkey# C0 c* f. p9 o
{int number;7 \8 @4 e/ K2 Z- \0 Y$ [- I
int nextp;
0 ]4 L! h5 O/ M/ j}link[M+1];7 `" M% s4 w' ^0 z. E% v
" a) c( u/ e4 r8 s$ R- e" d5 jvoid main()
- |1 ^- g& P$ p7 B. h- d9 f! ~6 i{int i,count,h;
- Y( R; ?9 g% ?) q) J& ~for(i=1;i<=M;i++)
% v* r+ c) |0 n( R9 Q) k{ if(i==M)
E2 S+ }) _+ @- b& C" `5 a: p link[i].nextp=1;
( y7 ?1 V. E8 ^) a% r else
+ m- a! E+ z3 j( l8 ~6 {+ o' ~) {/ | link[i].nextp=i+1;* e6 E6 g* R: e5 J% D- j. z8 L
link[i].number=i;
: V! W) c5 o8 _% A( v: s8 \}
8 J1 _9 g# m6 O1 \printf("\n");2 ^% K0 e- L* j3 n+ w
count=0;
# F2 L1 F& b" r- M+ |& Kh=M;* K& o7 g' \6 n% A: H9 t3 j3 j7 w
printf("依次退出的猴子: \n");( I! S2 |. n, t& G9 X
while(count<M-1)& U& l& ^; L# |
{i=0;
- b+ K& f1 b3 v, Y2 N/ x& J+ Y7 q' Ewhile(i!=3)
: \0 n, I; p4 i. b{ h=link[h].nextp;
. e7 \ v$ L; v) [8 [ if(link[h].number)
9 H& G8 I3 f- S: V8 i5 `% [# u5 Z i++;}
c/ K: s. _) |5 H* b6 a9 E0 t' I+ ]4 {: p5 ^. c1 L9 C& w6 T5 a
printf("%4d",link[h].number);
- m% k3 x. L1 p# x0 ~$ nlink[h].number=0;
! A1 e: N1 y* X5 kcount++;
1 ~+ |) Y. m& _) O! U# q}6 v* u \9 b/ v
3 Z' W% p- b' @2 I! c# S Gprintf("\n大王是:");) n3 D7 z1 g7 ]! C6 V U
for(i=1;i<=M;i++)2 F/ g C. ~# A3 w" N$ v
if(link[i].number)
: L+ u% O% r7 i/ Z. x9 e q5 ^$ b printf("%3d\n",link[i].number);
) o* V! }% _5 a8 A6 m& b$ _* b% l
7 m/ ^ u# P, F0 l! E1 y1 b8 v# R1 m- R& D6 w1 n) R
} : M4 `% a! i' y% f }9 Z/ ?
第三种是普通方法for循环
) u9 H2 k9 y1 t! F" P, h- y% q#include<stdio.h># D& b& h5 p+ {, U/ v0 I2 c
void main()
8 b* c0 ^/ r. P3 i{ int i,k,m,n,num[50],q,*p;
$ \; q2 B2 U4 G; x0 F' E: U clrscr();
# L; ?% D! q6 ?+ ^0 o% h printf("input number of person: n="); [ F# \: B& d6 a6 ~. X. t
scanf("%d",&n);. O# ?* e; x1 }. e; ]
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 X/ C9 X4 {1 f scanf("%d",&q);8 J; w: _+ v! P6 b+ n; K
p=num;$ `! U+ N' p& d2 l
for(i=0;i<n;i++)
2 E2 y* V- v3 E7 T8 {+ W *(p+i)=i+1;
* U c+ A. e" b2 ^, {" V' @ i=0;; s; C6 C8 {% L# _ W
k=0;9 C; R+ J* p, i( w" M, J
m=0;
9 `* h1 b) n7 r' W7 p: d+ G while(m<n-1)+ T( I! P- A/ @2 H, P8 e
{if(*(p+i)!=0) k++;
6 D) i. g; D: M3 n if(k==q)4 u- V4 A) S/ I C2 m5 u
{ *(p+i)=0;3 H, p( x5 X( \+ Q' w, O& p0 L
k=0;4 d/ d1 w Q/ |% C
m++;
7 n( l- Y, e5 [* ` }
5 I: n% ^2 n( Y" w0 _ i++;
2 J& U: s4 b1 l+ A if(i==n)i=0;
+ Q {$ A' g) U+ P% ~5 q# O! D }% ^3 U8 x& L' k- O6 h0 T
while(*p==0)p++;1 T$ X* u9 ~! R' Q. D+ f, K- H
printf("The last one is NO:%d\n",*p);: H) d' u$ D7 q7 f
getch();, M( S$ H7 p/ N+ L( k# i
! R+ v- {8 p9 Z5 F2 C} |
|