|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
9 R* B( o2 k% v0 \0 |这几天我在忙着编一个问题,我用了一种方法编出来!& m1 }3 a$ O5 [/ H X
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
* l9 a) R$ d3 P0 Y! j2 R注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 {2 \) b+ Z5 J' R2 i; l; h9 X& l9 j5 X" a' _& r, M# a# O4 @
& S5 S" T1 a- C2 a& b1 e6 M 题目% r: [) O% [5 M: J3 b8 }: c& v
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。3 H# m A* V, [0 o8 n) l5 Z
第一种方法:利用循环链表3 S- K) f# V; y5 g, x# d- O
#include<stdio.h>
h+ s3 E& h9 ~ a1 y#include<malloc.h>; s0 U, s& Y& {" R [( D
#define M 8 //共有8只猴子3 @! Q$ U, f8 a9 R
#define N 3 //数到3只时退出第三只$ c6 g* E$ i2 p t/ [; Q! G
typedef struct monkey( [5 g. w8 f/ S9 H6 w: l
{int number;
3 |7 Z" G* _9 w1 ?int flag;: @7 v, Z' q% y- l4 z
struct monkey* next;
: T8 U E6 A2 F% D( n3 B}MONKEY;6 z9 f$ A& M9 O6 v4 |2 ?- ]' x
main()
& {0 M) Y! Q. n6 [{ MONKEY *head=NULL,*p,*s;
8 `+ I/ x8 H4 l3 a5 P( ?& I( F4 s r int i,sum=0,count=0;( a: m- R2 X$ j
clrscr(); //清屏! E/ H6 x6 j$ V$ }
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ Q4 r1 ~ l) D7 m9 d; r p->number=1;p->flag=1;( E) k; @' \4 m# U% s1 g
p->next=head;
- a1 Q. t2 [, ?% h8 Y! x head=p;
/ z& F4 B- A+ Z! W* E. b for(i=2;i<=M;i++)
5 F* `' ~8 ^' p9 } { s=(MONKEY *)malloc(sizeof(MONKEY));
* g, h1 ~) S, W ^) R* x s->number=i;s->flag=1;
6 o7 J+ \% H0 q: Y6 ? s->next=head;7 f( P Y& m$ c2 v* G5 O
p->next=s;p=p->next;6 Q: t- B1 \: e
}
- J/ y* I" n1 w p=head;
/ ^. Q4 g& _3 Y! a3 t* O" |# z/ j for(;;)
7 u- U. r( M9 o7 ?! ^! R {if(p->flag==1)% G- X8 ?0 ]* c0 T0 [
count++; W( M5 ~7 u- m, n% m5 X& s
if(count==N)
' B0 l: i9 {9 U/ |, A2 s8 ? {p->flag=0;9 h3 z& w% U: f5 _0 R: t) O$ p+ C
count=0;8 q0 ~3 B9 @; Q8 l
sum++;}- q' x% N6 ]5 C, l& e4 y$ J
if(sum==M-1)/ \$ r0 t& f- J- f: v& Q
break;
9 H' V, F) ~" Q. [8 H3 M p=p->next;0 s* ]9 [; y' C3 x* a
}, _+ R& h# a d6 T* h
p=
1 _. M3 D3 K$ Q head;
/ f8 C8 O s( P9 U' Y8 C" s for(i=1;i<=M;i++)
( n& U( k; L7 O { if(p->flag==1)2 }" }4 F, `6 H2 F
printf("\t%d",p->number);) @$ h9 G4 S$ U) U9 C
p=p->next;
9 w, Y# d6 X! ]8 n4 B( B/ R }2 N" ?! v! Q3 H; _) M
0 n" v: t* c1 i' j' n) Y$ v: \* f5 {6 c1 X [" t
$ i+ D2 M: r3 V. b8 g* u; {}
) L) F3 W7 |, _: t/ Y! C第二种方法:数组& P x& P0 K" B2 Z3 q
#include<stdio.h>
2 c. x) K9 ?" W#define M 8- t& X% h* r4 M- ?1 m# P
struct monkey" s$ g k# O5 g. q0 ]8 e4 _
{int number;
: r# b- {* Q5 N' p, |int nextp;' X: D- j" f$ G- {
}link[M+1];0 L9 g+ G1 f7 Y8 x/ w
& r! l( U T- jvoid main()
# d4 q2 e0 h1 k- o6 O5 _{int i,count,h;
# Z* M- k, p9 _for(i=1;i<=M;i++)
8 f; X& P; K* x{ if(i==M)4 Q' J$ o. @, u* h5 P/ E7 H0 j6 a
link[i].nextp=1;
5 Y! D5 B i% U) e2 j8 [. h, `# @ else
4 w! ]) k2 s# N: a, ~! V" R5 l/ A6 c link[i].nextp=i+1;( Y5 e0 H# y" U# O! }0 H6 }
link[i].number=i;
, X4 B# ?, M9 C- Z/ ^/ E- q+ v( C}& R1 E* A, V4 q4 N$ h! N
printf("\n");
- N! D8 C, e! v4 Y9 c9 pcount=0;
/ { ~5 o7 ^0 U7 g1 p6 ph=M;
0 @9 Y& s' Q8 }( X2 e. Cprintf("依次退出的猴子: \n");
( I! s' W6 s" a# twhile(count<M-1)
1 `- f e( b1 ?: v* x$ @{i=0;
0 r2 L7 ?* P1 C9 b! o9 nwhile(i!=3)8 R+ A, Q9 G: j. E
{ h=link[h].nextp;# o9 t% y6 z) h( c' T I
if(link[h].number)
1 {: h, `) `+ x+ k. t i++;}3 X; L8 O5 r4 L+ y& D/ i7 q' R
) W* O6 w1 d$ D7 u* ^printf("%4d",link[h].number);' o) K/ c( P5 T
link[h].number=0;5 {- |* F) ~! c! a
count++;
6 D) o# a: C8 p: w% Z: o9 E1 F}1 z( S- ^4 `6 @1 c% z' _
. j" U9 F8 D5 i& |- v1 L, _
printf("\n大王是:");
- C: n/ v1 R; y/ e* O7 [( y# ? for(i=1;i<=M;i++)' r+ k2 T* [8 d. n2 x; ?
if(link[i].number)
+ X! t1 p" w2 Z Q) ` printf("%3d\n",link[i].number);) t5 y- c9 r$ u; R: Y5 G
. M' Q$ I. g2 s6 o# j q4 L3 J* p! u( K' W5 S T
} ; @6 o' T% Z, X# _1 m5 U! Z
第三种是普通方法for循环0 m$ | z. _ y8 R' \5 z
#include<stdio.h>
! a- U9 e" o4 Mvoid main()
. Z, ?3 B" F8 B{ int i,k,m,n,num[50],q,*p;
; N' \9 d% N: D" @. F clrscr();/ F4 S1 v3 l6 b
printf("input number of person: n=");) @1 x% @6 R; P4 W+ U
scanf("%d",&n);
+ I+ \0 X3 h% Hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只+ J, i$ O! L* ]1 {( `
scanf("%d",&q);
* V1 H7 g: y2 z* e7 B- F p=num;" l: \: T0 @8 X) F5 {
for(i=0;i<n;i++)$ U m, T5 L- c. X5 K9 a4 A% O) w
*(p+i)=i+1;1 }0 |1 Y9 h/ k9 p1 c; [0 o
i=0;
. k8 h' s; Z+ J: J" \# ] k=0;1 Z. \. \: H& B
m=0;$ e/ q! H/ i2 ^
while(m<n-1)0 k3 O$ G" ?4 w% H% C, C
{if(*(p+i)!=0) k++;
' U( H7 V$ N( d1 i$ _ if(k==q)( a, W5 H1 l4 W9 {8 B
{ *(p+i)=0;
3 n" o$ k1 @- b+ N3 {* z/ P k=0;
& i0 e$ K9 _- N# O1 ?! [ m++;
" I0 V O9 {+ g }
6 Y2 L7 P' C- ?# }8 I i++;
* M* y& L- P5 [7 n' ` if(i==n)i=0;& {% O$ Y; D2 s" P( |/ X! W8 b
}1 z4 n) L: N7 x/ ?- t* F
while(*p==0)p++;
) X1 Q% n. a G* `3 C printf("The last one is NO:%d\n",*p);
* r# ?5 I5 o# t, ?5 G: n getch();0 B8 ~* l X: @
: G* q$ f4 e8 e$ }: v! j} |
|