|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
, o r2 M' c3 r8 D2 V4 F) V# [& D这几天我在忙着编一个问题,我用了一种方法编出来!
9 }) G/ Q! {7 A1 L, D" z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!1 q& h' O" i2 w# H( j
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
; l, _: v$ e0 P+ y# c1 c3 r
) p* o0 m/ l: ^$ `5 B( v o% t$ O# c9 @
题目; l% {5 T5 @+ W+ p
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ R) ]3 T: i5 }# H2 ?. R0 T第一种方法:利用循环链表, C4 i; z2 E4 s) j: a
#include<stdio.h>
1 I" H+ T" o" l a( ?/ A9 A" ?9 ^#include<malloc.h>' O! ]% z9 o* V8 {/ t: _
#define M 8 //共有8只猴子. D, y- D8 }$ B
#define N 3 //数到3只时退出第三只# j* q- v; G8 |* J8 E. d
typedef struct monkey# R* r: |. q1 p: r
{int number;7 k4 l1 D, L! D: D x
int flag;; w( w0 U. Q7 V4 |. I
struct monkey* next;
" s/ ?, H9 |" h2 m. A( W" b}MONKEY;
- `4 d" s! l8 e2 D: W# Fmain()- y% \# v3 q& r. A9 q2 K
{ MONKEY *head=NULL,*p,*s;- k7 }& e$ X! T& @" ]$ z6 s3 e
int i,sum=0,count=0;# `6 y& U. N" m. r% N
clrscr(); //清屏2 M- w. h0 ~% J
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
! z3 c2 Z- t- I* L \' N p->number=1;p->flag=1;4 S/ r: t* H: [5 J+ I
p->next=head;6 \$ m8 p$ |1 n3 e Q
head=p;% E. U' @- a& }) j( o2 X/ B
for(i=2;i<=M;i++)
6 O0 a: z) u( J { s=(MONKEY *)malloc(sizeof(MONKEY));) D0 R2 |# N2 Y" e
s->number=i;s->flag=1;4 [; Q, D- D! k$ X3 n
s->next=head;
% U' L% j+ b& L7 Q p->next=s;p=p->next;3 J1 {- D/ W) E0 O6 r5 v5 A
}
4 @! N0 {0 h, L( e { p=head;
, k4 N& S9 u W4 S; | for(;;)
N& ?( h- J7 Q0 [! t. P) G) w {if(p->flag==1)/ i, K, c, j- t: Q: r
count++;' P8 o% E* _2 ]/ n
if(count==N), {6 G9 c3 h% `8 w
{p->flag=0;
" L7 l# ~: X% T# i: a' J count=0;' o; O2 a; f$ M, T
sum++;}
- |9 l9 G8 } `/ Q" j if(sum==M-1)# B# |% v+ `5 O0 M
break;
7 \- B% ^9 p. A0 Q6 N y7 q1 q p=p->next;
% \. ` s3 s0 N1 H: Q }
- i; ?1 M% I4 _+ w" a9 z3 K p=
% d, n: \- I& I; M$ }/ d. }- ? head;% f6 Q- O) D! K" x
for(i=1;i<=M;i++)! p" g2 s5 A) m( V. n3 s' b
{ if(p->flag==1)) ^! N0 R0 { f
printf("\t%d",p->number);
* {( p1 e5 h0 U7 W" h+ [# H p=p->next;
0 I# l- g: O. ~- A }
0 _* e1 O _0 X x
6 `. n8 M) Z, \+ q; G7 u# u- c- y: X, P% g* V4 \
% l. L% @4 W4 m4 B$ c2 U$ U# {}
7 {$ C& u- e6 \' \5 }第二种方法:数组
_( d) }6 q+ \, r#include<stdio.h>7 t6 |4 C A& m3 C, y! {" c
#define M 8
% D& K1 y$ r- ^ |' X# M7 l- F+ vstruct monkey6 p$ _" l! Y ~6 i
{int number;" i% k9 A( {7 s0 x, Z
int nextp;% b# R. {% E8 h9 w4 d2 V# L
}link[M+1];
" ^" H4 h! l# a7 Z! l( `: _) [/ R$ U0 V4 z1 T9 ]- K( q7 w
void main()" s+ u4 M; X* a& G
{int i,count,h;( r& l' [* r2 o! Q! G* E* D
for(i=1;i<=M;i++)
, M; i+ X% \0 v7 s{ if(i==M)1 Q6 X( Y$ G4 [; c# x: q
link.nextp=1;
3 \ S+ V$ Z4 _* ] else# \& _) h+ P" }# r5 q, d" A# ~# E
link.nextp=i+1;
, }# M7 d4 o3 Y+ S3 T link.number=i;
& K; e/ o1 { t5 V& s: ?}
4 k! N: g, M( N0 g5 B1 b( c5 eprintf("\n");
+ h3 _! `3 |$ [- q! k4 ncount=0;
8 ~$ r3 o/ m, W/ B3 n# M k3 Qh=M;
% x( @6 a, n/ J' ]printf("依次退出的猴子: \n");
/ I. N# K( G+ \+ r/ ?+ l/ Mwhile(count<M-1)
, @6 {* y" B" g{i=0;
3 y A/ C# F2 Z' rwhile(i!=3)! @6 J7 y+ V; D: v9 X
{ h=link[h].nextp;
7 R0 i+ \; A$ N% E" u* T) ^ if(link[h].number)
$ d7 u( a* ^, C! H i++;}
4 ^" Q) f9 ~0 r4 W9 O6 u ?, R1 a6 s+ O6 E/ t! ]
printf("%4d",link[h].number);
8 q- B5 s) e: ?" S4 u* hlink[h].number=0;
/ H- G4 p& |6 e! Kcount++;
+ H: q! ^+ p" Z+ ?0 N- C}
# C- p5 g$ Q6 @ m
2 \6 m" R" q7 ^4 pprintf("\n大王是:");( E: d$ J/ I# T$ j
for(i=1;i<=M;i++)
3 C0 |+ p. {' M if(link.number)& G+ F: w" C' I
printf("%3d\n",link.number);9 c; w$ U' [: ]: g" I
7 [4 M1 M/ [9 l& L' ^) s: R2 p7 U
0 ?: Z: N7 C: \# X0 l$ h4 B
}
3 O! Y9 ~4 Q7 l& T# L第三种是普通方法for循环" Z: \/ i: p) c8 e) d
#include<stdio.h>
; V x& {% C. L2 P# W9 v8 bvoid main()# t* x; T9 b/ C2 X
{ int i,k,m,n,num[50],q,*p;
m9 s# D0 Y! C* [3 K2 I( l3 p0 h$ B clrscr();
6 \2 B- j) I; D O8 a printf("input number of person: n=");4 }$ b- O' S) h) `" ^
scanf("%d",&n);
- e+ v, u8 y% y+ v/ c& Y [printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% e& x: D1 x* ?, D/ g; A
scanf("%d",&q);
) W, K8 }9 a: Q" Z2 A0 ?& | p=num;* p/ o8 y7 h$ `
for(i=0;i<n;i++)* H8 i' \6 ?' n5 z
*(p+i)=i+1;
: F; d3 G6 A+ D% Z i=0;( ^) t: |9 X- q& J$ j* A
k=0;: U+ p& Y$ e7 G: Z
m=0;8 B8 d2 z* T! r# ~& T0 `" ^
while(m<n-1)
! R( z8 |( [8 O4 w/ ~. K {if(*(p+i)!=0) k++;
3 R2 @# e8 J9 Y; S1 a if(k==q)
) `! R R7 {* L# [0 s$ `# `" |, K { *(p+i)=0;
* K* y, X2 o- x3 U2 T3 \0 g k=0;
* t( ~/ R% ?3 ?* b$ { m++;- R" A) T) q, |0 }; A5 G
}) y- w* i& {4 l( R; e" a7 g, b
i++;
" l' T& x4 r) b3 c. z- I/ q# k if(i==n)i=0; v) W- u! n1 I+ ^0 Y
}
1 `5 d- @1 D6 _% v' a6 S3 E while(*p==0)p++;
5 P9 N" _* k5 [' y printf("The last one is NO:%d\n",*p);' u: r+ S' Q5 D* ]+ i6 R
getch();
: ^( W8 `# k. Q& a+ o3 A
$ P% A2 P: z- P# F# d% {} |
|