|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!7 x, R5 N7 ]8 O0 O3 }& J
这几天我在忙着编一个问题,我用了一种方法编出来!
, Z4 U+ u( ]/ c但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!* x2 F5 X6 D, O# X/ Y
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 B, K9 v2 j. m/ H0 @. J
* {7 \# b/ b3 k8 f) P& A# ^. M6 @1 k0 O. C- r* M
题目% o! U3 \+ F- R k; i4 L8 b
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
L! C/ y1 f& G0 D第一种方法:利用循环链表
U1 d. t/ _ Z6 A#include<stdio.h>! y. d: B8 J+ y8 {3 o; [
#include<malloc.h># A# D& i! `% b$ ]
#define M 8 //共有8只猴子
: R* o: A- R% M5 a* M#define N 3 //数到3只时退出第三只
7 J. Y9 a* J, xtypedef struct monkey. z0 W% U8 w& _! N
{int number;, s' e% f( I' c% ^4 Y
int flag;/ B3 ~7 L' C$ Y/ m8 n
struct monkey* next;
$ l2 V9 e7 c& Q+ `}MONKEY;
& m6 l8 s: |0 |, b4 R; emain()
* L, C/ i( b- Q6 @{ MONKEY *head=NULL,*p,*s;& w$ S" _4 o& S& E0 z: R
int i,sum=0,count=0;( f4 V0 z: @/ y! a) `
clrscr(); //清屏" p' R9 p9 Q, @& q6 |- n
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
2 x' i. o" J$ L( |9 ^! W p->number=1;p->flag=1;
9 o/ A& {0 ^4 [* t+ v9 Y p->next=head;
t. z" O9 K1 \1 h G8 Q# o head=p;2 s+ ~6 s0 x4 b9 {6 I
for(i=2;i<=M;i++)
% n9 A! A# p% S/ ? { s=(MONKEY *)malloc(sizeof(MONKEY));; m5 ?$ X5 P1 @$ z2 [
s->number=i;s->flag=1;
0 R5 j& s! V+ W( z0 Z s->next=head;
. ]3 u- m# ^1 C; H% ~; C p->next=s;p=p->next;: U. {( m8 R& N- Z' `. t2 g
}" ^ E" c) ^$ M: q/ {+ `
p=head;
4 h7 [: Y1 S( K8 U: ^2 G' n for(;;)
( x% M" U7 u: ?2 L* X {if(p->flag==1)
, I0 N! G X( k# T" i count++;
0 `/ a1 o' k. ~& b K if(count==N)
% ^3 ?* X9 ?( i {p->flag=0;
$ r) L8 K7 i: l P/ z+ N$ Z count=0;
2 D" d- r8 ~8 Q; K. w sum++;}
, T: z! u' l8 }, i s if(sum==M-1)
8 P+ H) f: ?" j# M: x6 g break;6 N. I; L9 R' y
p=p->next;' G+ ?" J' R% R
}3 o k/ M: u$ h G
p=* k# `8 ^3 ~; W- }: c1 J
head;
4 \4 j" w |' j6 Z% H3 R for(i=1;i<=M;i++)$ M0 B- A O* ?2 B- m: f
{ if(p->flag==1)
' Q7 J( c7 A9 j8 @( g# | printf("\t%d",p->number);
) d4 a/ p: p$ k6 R) U, \4 u4 } p=p->next;
! p/ x/ q- l' d: e6 r+ t* c }' O' \( ]; _+ \: y9 i
9 A' T0 J* u3 m% s7 L3 |/ F- a3 G4 y: p
* T5 K# c5 [0 @2 Z
}
$ h* D' J7 V- q" k" J4 q第二种方法:数组
4 G8 X# N+ `0 Y# T# Q#include<stdio.h>
7 u4 {% z" e" ^$ v8 o#define M 85 ?( C! N2 ]# Y w4 W4 ^9 H
struct monkey' n; |6 G. V6 E
{int number;
7 L3 v" B7 k# wint nextp;9 C h; u( e, U& _
}link[M+1];4 G- ~4 e/ z: L6 D( e: A
6 C3 A6 v- Y$ S, { ]5 [2 kvoid main()) h, F7 p+ X, J* [9 e* H& Q6 @. L Q
{int i,count,h;+ @3 L2 U5 X* I: R* n* g. |2 k
for(i=1;i<=M;i++)5 d- d' a- G$ h! w
{ if(i==M)
5 g4 V9 \3 g4 y( r link[i].nextp=1;
6 e- O5 v1 S9 m else
& N# F- W; i# y" N2 o7 y link[i].nextp=i+1;
$ Y6 W* m% y# y link[i].number=i;5 p) ]; q( u0 p1 y& z* S u
}6 F+ Y- n( j2 b5 y. ?8 @
printf("\n");' t0 C# s4 n8 I
count=0;- A2 L, p+ U, o. M
h=M;+ D+ z; w J. E T1 `
printf("依次退出的猴子: \n");( a% K. ~9 e+ ?! k" }; r
while(count<M-1)- M$ @& N" w( L5 e3 C0 R5 P
{i=0;" F" c% B9 L* i9 K, a
while(i!=3)% H# |/ Q3 @4 B; c
{ h=link[h].nextp;
" K7 J0 m, e# c0 B if(link[h].number). b% ~$ H% P* f- ~5 H
i++;}
* @& V7 w+ p' D% X" T& T0 z
6 r7 ?( l; \* R0 ~5 Nprintf("%4d",link[h].number);9 q& @9 F$ D+ m9 v6 ]) y# r) T) {' g
link[h].number=0;- R( O* X( q7 P* f( I7 `
count++;) A+ `% H3 Y7 J7 c7 h, T G# l
}
% s8 r0 `$ W$ T% F% g& Q! ?9 f
" A; o! i, t3 l0 }7 E% O( t; L" n% lprintf("\n大王是:");) e' V- @/ f4 k) K
for(i=1;i<=M;i++)" ?: Z: P: {8 i- n# j8 ~
if(link[i].number)
# v& t# m! k+ s/ ~; ~ printf("%3d\n",link[i].number);
- t3 G' ?3 Q9 l$ F2 p0 _! u2 d! T! K
1 I) _9 Q9 T1 ~* M: V' Z* F- i7 o" N" T8 a$ }. F+ L! D
}
$ o" F% K3 ~ j O5 ~& z. ?第三种是普通方法for循环4 p2 G1 Y% E2 _: s6 x1 J. v
#include<stdio.h>
" p T! n( ^ n! K1 V' tvoid main()
3 V1 t U2 A& W! ^- {( X: @# O{ int i,k,m,n,num[50],q,*p;1 G" {) T. b# m. n
clrscr();. C9 e- v" X6 c- {7 D. c
printf("input number of person: n=");
& c; V( B; c. k% a2 J# { scanf("%d",&n);
% k" i4 {% a3 S% ~3 n+ Xprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& J, V" h9 ?4 I& u' u ^
scanf("%d",&q); }% z* R3 R% D
p=num;
: F5 J8 M' V2 x2 a9 R for(i=0;i<n;i++)) X, P) u$ H P E/ D- x9 B
*(p+i)=i+1;( U% o. n. F1 c. G5 z/ P- ~
i=0;% A/ o7 T4 M8 P0 D
k=0;
+ |% c% k8 _( S! L) E1 ^- F m=0;
% z$ a1 X4 W9 ^0 s% U* k while(m<n-1)
# g. @) ?7 J6 h2 x {if(*(p+i)!=0) k++;
z1 G7 l& `* i' K% T5 w# f4 f if(k==q)& z1 }+ A+ P$ K+ D- m
{ *(p+i)=0;
$ I; I0 W7 ]0 T( d k=0;: j, K- s# e8 j/ }% T
m++;2 c. b8 v. `) J2 x
}) o/ ]0 f4 W, c: S1 K" y) i" \- ]
i++;- N% g3 l. w E' k) C" Q# G/ s. K) h
if(i==n)i=0;
6 P8 Y. R/ K7 u8 ? }4 m) I( u7 G9 @. V& K8 p$ u* P
while(*p==0)p++;/ v' w6 U7 t1 s0 e1 Q, P+ l
printf("The last one is NO:%d\n",*p);
2 y2 `1 I5 p e8 y; ] getch();6 T6 E) C% R6 e0 e: h+ x
% o/ _+ o+ E; S# I" d# |, e0 |} |
|