|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!8 d5 d, W( D1 @" c1 Q2 \
这几天我在忙着编一个问题,我用了一种方法编出来!
2 _* O/ Q& F( c/ r- @但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
: |* i/ C+ P" X注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
9 i; E8 B- S) q2 j; p2 |
, n8 D P+ y- m1 ?/ U6 |- L* X/ m/ d$ ?
题目
/ G5 c3 ?* e. C0 T5 Z- t% j0 o山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ ^( N: Y7 ^; {- C: X第一种方法:利用循环链表' V' k- M' Z$ B1 v1 l; K
#include<stdio.h>
1 A2 G7 q% a/ G* ]% T& d% E# ]#include<malloc.h>
0 u: [# R8 {$ i- x* h#define M 8 //共有8只猴子; ?* R S$ V3 o- p1 t+ A
#define N 3 //数到3只时退出第三只( t8 v+ F' h# s# v" V
typedef struct monkey0 x5 t& I7 B& Y) }
{int number;
- \8 }2 S. r/ @5 oint flag;
v3 t2 k( w9 i1 L5 qstruct monkey* next;
+ g) b6 W# d' P/ R% q" I. t" m: [}MONKEY;$ z8 w$ N6 @9 u4 ] j
main()( [4 M, |: k9 z- B, X; L7 J
{ MONKEY *head=NULL,*p,*s;
# B3 B" B9 a2 M int i,sum=0,count=0;
8 v6 Q Z- \) k3 v( S0 A1 x1 x& O/ G clrscr(); //清屏
7 \* h! g* u. ] G8 K p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
1 k1 i. ^2 j5 d p->number=1;p->flag=1;
0 L, y2 h2 q; e# N0 @ p->next=head;
# z h, i; y7 |" A head=p;
, ?& Y w B2 K" |0 R, C for(i=2;i<=M;i++); S* u! d2 A& k4 F7 h* ?5 x
{ s=(MONKEY *)malloc(sizeof(MONKEY));9 c9 F+ q: g) H3 J8 [/ `* {; @1 ]
s->number=i;s->flag=1;
! x) e$ E& ?* t! t. |4 o s->next=head;* F$ ~; K( _' b6 n
p->next=s;p=p->next;
1 G h2 G( C5 f a/ O0 | }
! f6 H; e; l( y3 X, f p=head;+ Q( o9 H2 c x) t( O, Y3 S
for(;;)" ^4 `. R7 p' e8 x
{if(p->flag==1)0 X& O; C: {6 y
count++;% b8 ]0 ?1 v; j6 ^
if(count==N)
7 X! S; T8 F5 f {p->flag=0;7 d. h" ]/ j, l
count=0;
0 r7 y: Y$ [3 r' C$ E sum++;}5 Y3 d" o9 I E$ A; s4 u. \
if(sum==M-1)2 _ w. M% ]" p: Y7 J- z' T
break;6 d4 j+ C. R: e3 ?. \( t' }0 Y
p=p->next;6 M9 x( [1 x1 g- n W* X- _& U0 q
}& W/ v# |* \) A9 w r. D
p=
3 u$ U" r4 d3 J( X' n head;% Z) q1 ~" P9 v
for(i=1;i<=M;i++)
3 B" v# L3 t$ a4 A { if(p->flag==1); y- A7 j$ Q" [
printf("\t%d",p->number);8 j7 ~9 ~8 V% W+ f5 Y2 i F
p=p->next;
: K* ]2 x% n* A, ~! _! F }; E @ x7 b( p% k3 F3 T# c' K2 x
9 }( q! _$ l' g- a% n
4 `; `! B' \6 u2 Y5 A! Z2 U+ x: p& M* M* R. ~0 w4 i w( w ?
}
& n9 o6 i1 _" `第二种方法:数组2 q9 R8 ]9 p+ }
#include<stdio.h>6 v5 L! w3 ]: e5 S) K. T$ R
#define M 8$ k, w, N! h! e; A( M$ G( O- g
struct monkey
0 o1 U) X0 A% t# Q9 T{int number;3 x6 W# D m+ X. x v/ I' T
int nextp; l+ o7 g* X& i" a6 V' o
}link[M+1];1 k! {! t0 R$ g/ e/ g
. a5 j0 d( A4 z0 g* uvoid main(). a |9 Q9 i! |% p6 p
{int i,count,h;
* r+ Q; E$ O( c0 G: [for(i=1;i<=M;i++)7 p% X# x7 I" v- {2 w
{ if(i==M): ]9 {) B1 @! n
link[i].nextp=1;
( s+ `; \4 c; q- Y else
0 D+ G5 }/ ?/ a. M link[i].nextp=i+1;
4 ? e7 k' j2 t4 E/ j link[i].number=i;
' U/ a4 g1 I' s+ U9 ?}
6 F( `: z+ b9 ~) x# sprintf("\n");
5 }( q% l) ~6 o& C5 ^3 b9 vcount=0;
& [8 j* O4 d" t/ Ah=M;
7 ]" Y3 S9 T/ q# p" Z% _printf("依次退出的猴子: \n");
: W6 _; } y. C6 W) m) z; x9 S- Swhile(count<M-1)% p6 I8 H1 R( S2 r& @) F( }: r. J, h
{i=0;+ @5 O# h: p( |) m5 N/ n
while(i!=3)% l( S' l' J% q4 |: F: _3 g( W
{ h=link[h].nextp;" T, M9 R6 U1 O) y% r! Z @
if(link[h].number)3 V9 m Y j0 U" n' g0 C. t7 E' L
i++;}* q! T( G. q7 d9 c [
( b+ \5 v6 m7 R6 Vprintf("%4d",link[h].number);
7 W4 E) z; h# O8 }link[h].number=0;7 i0 o* u1 {/ s8 @2 X
count++;' Y3 U/ {/ ?/ z( m+ G
}
+ E5 d8 ^1 @& s/ y" t
) x4 V; D. k8 f4 V1 h" lprintf("\n大王是:");
( H- o/ y0 @- t& c for(i=1;i<=M;i++)
) m7 s5 c9 z! r% `2 D if(link[i].number)! C& u0 Q a5 Q9 X/ p
printf("%3d\n",link[i].number);
3 c9 V) G1 L$ v( Z* `+ U
1 X: L8 I; \3 o+ ~( W. q9 M: D& n1 I* g9 ^' {( }( Q) O5 ?
} 3 x" P" L& E* H9 }& B( l0 J# E
第三种是普通方法for循环
% ` Y6 e* y3 l9 J% a/ b$ Y9 @- f#include<stdio.h>4 ?6 f: g: W+ @4 e
void main()
+ |0 q2 Z- U/ N( g8 j" b! J$ ^{ int i,k,m,n,num[50],q,*p;
6 q- p5 d6 H' A. u( y% Z! W clrscr();
+ W/ ?) g4 l) v/ `' { printf("input number of person: n=");
$ n7 t0 I2 X5 D- U scanf("%d",&n);
+ `6 b. i# u6 y4 E; I$ ]printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 Z$ P+ }: Y& u+ ~; P4 B* H8 c) E scanf("%d",&q);( h E' m/ d8 k9 o1 W1 A
p=num;
- q3 W$ j% o/ a$ B for(i=0;i<n;i++)
$ Q. z: \1 H" Q) q; H *(p+i)=i+1;6 w; J3 X" O1 {4 g! q a" g* B1 g
i=0;
! r0 ^+ |9 L3 V$ E! b$ A k=0;5 @' ?# o4 _/ ]5 ?1 y4 C- t; C* C
m=0;
& H: O8 k. R( k6 M3 a while(m<n-1) r$ C v) i$ g/ _* i |; s
{if(*(p+i)!=0) k++;) G7 e) ~7 Y: s) N( k4 Q
if(k==q)
. q E. L$ Z& g x { *(p+i)=0;
* O; t0 I3 j+ }: F' p6 ]' h k=0;
6 L+ g& c4 [& u* y$ J# E m++;9 E1 O5 N7 [0 Y' I3 ]; E' Y8 e! P8 A
}; K5 u) S% v P7 ^9 L1 e& x |- \6 [9 A
i++;
" Y5 w/ t& s* a: `0 l3 Q4 D4 C if(i==n)i=0;
, P1 _9 Z2 K% L# u' ` }
' w; |7 T, x5 V+ H. f0 Y8 C( x while(*p==0)p++;
4 N3 ?$ G* h& u printf("The last one is NO:%d\n",*p);3 ?: I. V# ~2 u$ Q) ]' Z" D
getch();
* H% O) ~9 @8 S4 l( T: j
+ B- \ U6 Q4 S! {# l} |
|