|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!% e: W! A/ n- U; F9 E
这几天我在忙着编一个问题,我用了一种方法编出来!% S1 ~, e9 @% r
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦! m% S5 [3 m4 P# [
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 p3 L/ w5 a3 T0 A6 j/ ^- \ W7 u
/ {9 ]* ^2 z7 b) Y6 |+ k w, Q- T7 R8 B
题目
5 F+ s0 j1 U. e. O+ g, }山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
A- s4 Z6 G# j, Q; p4 j第一种方法:利用循环链表 E& y: D% h$ O
#include<stdio.h>4 Z8 Y( J1 M) N) L
#include<malloc.h>
C' l* [9 T9 x5 \4 k#define M 8 //共有8只猴子$ \* E: @4 Y/ D H! M+ ~: A( x( _
#define N 3 //数到3只时退出第三只9 D+ U* Y& P% ~8 K
typedef struct monkey* h; |0 I3 j4 [
{int number;( ^6 z) ]" \" z1 }
int flag;! _& Z, w: \4 c s0 c
struct monkey* next;: ]# g/ Y. X! G p$ G
}MONKEY;2 r; o: ]: o1 U Z1 M3 f9 D) I% r
main()
" }2 O, m2 Y1 j% B$ y' S g! P{ MONKEY *head=NULL,*p,*s;6 _9 `2 S% D1 y( U4 [/ |* ^/ C
int i,sum=0,count=0;
+ U2 J5 S' l# x% g* l- n clrscr(); //清屏$ Z$ d$ t% r( N; s% r" S! X" c
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存5 e% s! Y% ]% Q
p->number=1;p->flag=1;
6 ^( c8 v% F' X9 z; u p->next=head;1 w; m8 {& J$ m
head=p;& P8 J7 k8 `+ f+ \
for(i=2;i<=M;i++)
' e& e$ b8 L+ S- y. a { s=(MONKEY *)malloc(sizeof(MONKEY));
, m }2 q- Q$ V0 ] s->number=i;s->flag=1;! v+ L z5 `8 ]' E; n9 K
s->next=head;5 ~4 s Q; w$ u; [$ W- M, N
p->next=s;p=p->next;, j6 v, w1 l) j* F# [
}! n" } D6 C& F* g2 u
p=head; @# I; D- a6 \' R& S' \) k
for(;;)
% z/ c# I$ v8 r9 n {if(p->flag==1)
4 n+ ?9 x' F% ?" H! u count++;
4 v# O" D' V' }1 _$ [ if(count==N)/ X2 y% L. D8 _ B# Z$ l
{p->flag=0;
' E+ @4 U$ B7 l count=0;( A" m% h' \% W- O
sum++;}
5 d Z1 j# a1 ~6 p$ M if(sum==M-1)
& U4 `! n4 D% T- f8 F) [ break;
& f4 f' W$ b9 j* e/ H% K6 W8 i p=p->next;
O' E) Y9 O: N$ Z8 l }1 R2 l& r" l' K1 Y' W" z5 O% q
p=# k/ @8 n2 m! S
head;
( j! u7 g: s h for(i=1;i<=M;i++)
( R0 X: Q7 V/ U& f { if(p->flag==1)! ^" t% N! M9 U) Z
printf("\t%d",p->number);/ `3 J6 N) D: `
p=p->next;5 m1 ? u) z6 _4 a; C
}
1 }, e" @7 L# Q" G( }9 S( t: b
% P' l! @ y) b$ m. W
3 v1 p2 X! g+ H: B3 M8 Q9 n: F. ^6 D0 f$ L; M Z$ u- x" J( L
}
) \, o+ G! a G( h第二种方法:数组
8 i" g7 W8 {$ r4 `#include<stdio.h>5 R+ G0 J" D$ l4 \9 F0 x
#define M 8. q% a+ }3 N# ?1 I; K
struct monkey
% M, D- _, k/ B5 c{int number;
, B0 m, n% K g3 e) \int nextp;
, {% c* Q) H7 s6 ]! @1 T6 E5 I5 i}link[M+1];0 y( ^8 G" ]/ I1 S
: R6 c. i5 j' l$ P( U+ |void main()
4 O* f* j5 W5 d. [( k$ [{int i,count,h;
2 U0 w$ D7 J4 Kfor(i=1;i<=M;i++)
! j7 T. Z2 R1 s0 L{ if(i==M)( n+ D3 b- a2 p$ R' Z
link.nextp=1;
7 R% I- ?3 B2 E& _9 C% z: L& e7 M else5 z/ k$ d# c- g% R
link.nextp=i+1; s* q$ [* t: ]7 M+ A, A
link.number=i;$ |; L2 B$ y4 ?9 F8 p7 \2 R
}
; c2 E, M6 C, Lprintf("\n");1 G& F$ O) _6 H9 P
count=0;) x# }9 `& s7 T% U5 H8 x
h=M;
" p+ B- x- v) F' [9 u! B! H) cprintf("依次退出的猴子: \n");5 y8 x) r5 s6 \& W
while(count<M-1)
1 k. R9 B+ ~( z: S{i=0;
) {2 x8 t7 N3 H: ?while(i!=3) f5 x# A/ r7 y0 ~5 w7 V! I
{ h=link[h].nextp;) g3 n( j( C- X
if(link[h].number)$ w8 W: N1 V, w ?% s( K" E" T
i++;}7 }* u c/ m* k# x7 ^! @4 ~
5 H. [( \ d# C4 c$ [printf("%4d",link[h].number);
# T) n% R) S8 N5 n. J: Ylink[h].number=0;/ I0 I3 g6 t. H4 O* A
count++;
' x' C1 l t, v! y) U, D}, ?' Y: Y4 t& P; }: P* Q
E. t) d# q6 ]* H, x0 _printf("\n大王是:");& ^% O* x* Z/ e% X( g, B8 {! R
for(i=1;i<=M;i++)
% W+ C' f# S9 M# L! D6 n if(link.number)
: C7 {1 R: H* W$ U A printf("%3d\n",link.number);
, k, r! x) X2 v l# k) X4 f8 A5 n; w. D
+ G- I0 {* R& F4 x; E
} , _9 W4 ?; {" g9 g3 y
第三种是普通方法for循环/ |$ p7 w4 [& X$ O) z
#include<stdio.h>! P7 p. r, S* ^* d" [9 ?. v8 X& ]2 B
void main()
2 \6 W: d( w, L{ int i,k,m,n,num[50],q,*p;9 T2 Q+ Z/ a" i
clrscr();
6 i% O( ]) i6 S& Z0 \0 y% q' A' O/ _ printf("input number of person: n=");
: V3 \, r+ q4 o scanf("%d",&n);3 e0 b7 K, B" u5 `# o3 \
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& W$ x7 t k1 W& j* v1 G
scanf("%d",&q);
4 L* U6 r& J! `2 T p=num;
9 p% K. [$ q5 W6 \ for(i=0;i<n;i++)
/ o3 h# K4 _2 S H! f, R *(p+i)=i+1;: P) n* q Z3 f [, h2 Z s$ K1 l
i=0;4 {' C0 D' i4 e' r
k=0;
# f( d+ j2 p3 p& [0 j0 | m=0;
8 b9 y' \4 z, b+ b9 _' \ while(m<n-1)0 b. H' X ]* F- [3 S2 r/ W
{if(*(p+i)!=0) k++;
6 {% A: X$ q% F if(k==q)( x: J- ~6 ~ `6 F
{ *(p+i)=0;1 X4 ?5 [5 `) \4 |
k=0;5 Q6 I/ F5 o6 P7 }
m++;
* q5 N) G& Y0 M7 L }
$ s; i& h ?8 P% f- Y/ I i++;( n0 I; O: J9 \( G
if(i==n)i=0;- v) y- B, P9 ~+ y
}% R2 i! N/ [! q( ~( ^% q% {
while(*p==0)p++;! X/ U: [9 h: Y% ]2 b @
printf("The last one is NO:%d\n",*p);
* D: U; C7 x/ Y getch();
# {' U+ T; {9 @' c. A5 I; e" r; t( y& Q+ \7 p2 y! v V2 O
} |
|