|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!% z5 S `) r( `
这几天我在忙着编一个问题,我用了一种方法编出来!+ j4 @! ~( x' J7 U
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
3 r/ c8 D$ J9 z: N注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 " u+ j X4 Y7 A1 z5 }" |
2 o3 B8 W0 x5 ]. U
" a4 Y9 l" \2 N" k, O& e& x 题目
. r8 r5 _# I# d% `" j$ n山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。9 X* d' W" }6 z8 {. U
第一种方法:利用循环链表 o3 x4 Q1 \, S! r
#include<stdio.h>9 Z: i! n+ a, @/ n, j" A" X: h3 S
#include<malloc.h>, G, N$ R+ n5 d6 n$ w9 ~
#define M 8 //共有8只猴子0 A1 p; A( u- A0 D1 d5 ^8 R
#define N 3 //数到3只时退出第三只
/ J8 z# a! C- [8 A0 u( Ctypedef struct monkey L8 j* e% a& N0 k& e$ j# F
{int number;: _ h F8 Y- l% A
int flag;7 t6 ~: x" h' a0 {1 d
struct monkey* next;
* Q! N: Z! N, d9 w0 ^; s' p}MONKEY;7 f9 _0 z* T& ?6 |# d2 z& ^
main()! u" q( a6 M, G8 B9 V. c$ m* B6 C
{ MONKEY *head=NULL,*p,*s;
* _1 v8 S. ?- {8 N int i,sum=0,count=0;
; ^7 D7 z1 B9 D, u5 U/ f" q) r* v# x0 z clrscr(); //清屏
9 P% h6 b/ V G7 N* T( w/ O p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) T7 i/ ~- f6 u3 _( u8 v p->number=1;p->flag=1;( g5 D# L% S; F. E) [, C8 b# v- K
p->next=head;) L& u3 J1 k; N7 G1 U1 K
head=p;
+ o0 ~# Y! e0 {! ~; W for(i=2;i<=M;i++)
- q% t% U1 y' d) g2 m { s=(MONKEY *)malloc(sizeof(MONKEY));
! d- y) F7 I1 ~9 r! ^' R6 x s->number=i;s->flag=1;) `0 J: x1 f$ L$ v y f
s->next=head;& ?) v9 r1 n" p, H3 ~7 r
p->next=s;p=p->next;
2 Y) h' t( ?( l$ t }# _) X) x9 ]8 E3 _; B
p=head;2 v6 i! e5 z% R% z2 M% y, n2 l
for(;;), j* `( i' U: C% U+ h' f2 r- U9 J" C
{if(p->flag==1)5 u, B& g: c5 I9 ]' k
count++;
3 y! h* e, I% e* ` if(count==N)
* K `9 N) i. j; O {p->flag=0;
( a8 E2 Q' K! T+ `0 P3 w count=0;0 H6 P" m" H, N
sum++;}
6 h0 n* _9 _" q7 q3 ?3 a% a) p if(sum==M-1)
* S( H, X8 [1 g! z break;+ }& r! ]/ \4 |( D
p=p->next;
7 |8 I7 ~4 i' S }( D- c1 z; n& Y" h" g
p=8 z/ Q2 ^/ g3 _: P- M! a
head;4 i2 Q$ A( w* N5 e0 ~7 L2 a
for(i=1;i<=M;i++)6 q3 l+ c" A8 Y/ n
{ if(p->flag==1)0 c4 n: R" ?& \. \+ N
printf("\t%d",p->number);& N0 j# |: G& z+ J
p=p->next;4 }" f; Y2 i9 p
}
4 n o! o% k& s2 l# ]* U7 E: ?3 n' w# y% b: U( r
Y& t: X6 P! n. ]
' v! F( E( B, D) m+ P& `% j}
" R7 G" g5 m7 Z% Z) V第二种方法:数组2 _9 C1 n3 z& p" a1 D
#include<stdio.h>
: P4 K9 ^* H; [3 u* U#define M 8
: w& s6 N( h$ ?struct monkey
; ~, ~8 j- ~; m$ L{int number;& I, t# j% F- K Q- X# D, [
int nextp;
; H$ z/ U' ]) J}link[M+1];
/ o. |4 D+ R' a6 i8 c4 y
6 y; w) ~0 g( ~3 F! j% kvoid main()
/ \( @) W! g$ y: i; C- A. k' x9 R{int i,count,h;4 D5 M W# E! m, k' r! r' \
for(i=1;i<=M;i++)
! F& m# R1 A5 G6 W{ if(i==M)
, R* J" k) n7 J link[i].nextp=1;. b( ^5 z0 ^7 {
else; l5 f" F% C2 A, F/ W) T; z* D
link[i].nextp=i+1;
) x( u( W/ a- B: V/ G link[i].number=i;9 A+ i2 G% S8 Y9 h9 H+ l* A
}
2 f" \3 j9 \" w2 d* \+ @: O0 A! Vprintf("\n");
. U: }! ?0 k" v) gcount=0;2 [7 k+ l5 \ w9 U( b- ?7 A
h=M;0 E( i# A$ f" p. {: |7 ~1 \% E
printf("依次退出的猴子: \n");$ n* R3 i+ n. G1 X1 D( A
while(count<M-1)
; T: d# I2 O2 v7 Q{i=0;
3 c; S/ c6 g+ w4 q* Ewhile(i!=3)
4 O* L: p" v& x0 {{ h=link[h].nextp;
( M7 A% I0 K2 l5 F9 Z/ |# ~" N if(link[h].number)- n, T. G( g$ X7 h0 g& B6 `* n
i++;}- G! I0 k5 A/ H+ {* ~( W9 a
. c3 s; \1 a6 Z0 {* V9 q' x& p; v
printf("%4d",link[h].number);. r) |; W+ t9 N/ s9 `
link[h].number=0;4 T( L3 c) l/ G/ l
count++;) ?3 a6 q L4 }+ i% H$ `& H
}2 |" _" p+ y! r1 ]
2 W% W5 s( j* m# m
printf("\n大王是:");
# _+ ?) q8 }! @ `# T1 u! N for(i=1;i<=M;i++)" p& b; v5 r. _5 ^8 f$ y
if(link[i].number)1 u) q" z4 `; r4 H ^0 z$ R, z1 T% q
printf("%3d\n",link[i].number);
8 `% N) n% B& ?7 ?6 I
5 H3 I6 ?9 E/ N
1 ~/ e# K2 v+ S}
" d0 X' q% h" i" C8 A( p: [8 s第三种是普通方法for循环
7 `3 q: F/ B; d# j#include<stdio.h>
( u Y1 ]7 L, D6 }void main()1 ]/ d5 y; }! S7 Y) @2 S, [
{ int i,k,m,n,num[50],q,*p;! k0 x) Z J0 A" ]/ E
clrscr();) W: G9 c2 `( d0 F5 G+ L5 W
printf("input number of person: n=");
; S+ [; S, y ^( g scanf("%d",&n);( f$ s8 C' Z# W9 i
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
0 z( g2 g8 [3 A scanf("%d",&q);
- S! o% [5 h) V/ I% c$ p p=num;
" v+ F% L; O( g0 s for(i=0;i<n;i++): Y; z, h* m( I0 l8 w6 l
*(p+i)=i+1;9 V0 e! O. X E: u0 p6 x! _
i=0;; K0 ?) `9 K& U) `, i; k( W* A! e
k=0; o$ }/ [2 J1 T' ?; y
m=0;# c, j- r) y% Y n
while(m<n-1)
0 O8 ^) o5 o. U( i# z6 q {if(*(p+i)!=0) k++;8 i$ V0 o: k7 Y0 i+ e3 a
if(k==q)& K4 S1 }8 I) Y1 U+ \( p$ _% l
{ *(p+i)=0;. t9 X7 [3 G1 m! ]) O
k=0;
4 A+ M6 M# Z+ w3 [ m++;
0 H! a2 ]9 h1 U% A5 m }1 @% K5 C% D$ O
i++;/ B R, d$ p/ w5 x U8 C
if(i==n)i=0;- I3 F- J* V3 B* F; U! K3 x8 V
}/ V- E& f* A( F" o* E
while(*p==0)p++;8 g' a6 z3 J3 B) z
printf("The last one is NO:%d\n",*p);6 S5 M/ _# d3 F" X- K5 b% q% y
getch();
" Z7 j5 K7 r, D: f, A! P' C4 Y+ C3 i& t4 g8 n
} |
|