|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!; s6 d g/ x# {3 y+ L: Q
这几天我在忙着编一个问题,我用了一种方法编出来!
8 I. \% E# Z2 k+ v% R/ i6 j. c但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
4 F6 i: \4 J% V6 z; d! {/ {& P5 j+ w注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 1 D0 b7 o1 W, @7 i, z
B! [8 x/ G' ]& c+ w- h! }! h: S+ W6 K$ s
题目8 ?3 `$ ?: o8 |3 S( ~ l
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
0 j9 N7 s6 [8 [8 c( C3 C! k第一种方法:利用循环链表+ s* e. z6 E* ^) w% s- \ I# C, u
#include<stdio.h>7 @: L+ G. s( j& a
#include<malloc.h>- x* N4 |% V/ ^% p1 k9 a
#define M 8 //共有8只猴子
; p$ a) I, ]2 Z) p; g2 L$ v4 w#define N 3 //数到3只时退出第三只
8 ?% S/ R5 v# t$ m& [typedef struct monkey
5 e2 J' L" Z2 [& y; v M{int number;
, |# ^) ^: m& [/ X& d- tint flag;
0 g- g0 ^" e0 ^; F* N- t, xstruct monkey* next;6 o+ l4 c1 [. M( a6 k7 a
}MONKEY;
1 _' z* G) E7 e/ N! ?main()
V5 t/ H2 [" f( B. G{ MONKEY *head=NULL,*p,*s;+ ~' T9 A, t: r5 s( K: e
int i,sum=0,count=0;
3 j; N' J* J, v. A; b1 K clrscr(); //清屏( A6 C- \6 c7 e; f" x6 E6 H1 Y
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
- l6 a: D: j- K; Z& } p->number=1;p->flag=1;- z/ b1 X3 p& V8 z% h( h6 p
p->next=head;
9 ]5 O% z& }* c7 g head=p;
7 W) ]* T/ G% M for(i=2;i<=M;i++)( b, h' B; X& N: p7 [
{ s=(MONKEY *)malloc(sizeof(MONKEY));
" s% c. M% V- X% W6 @( \+ e# p s->number=i;s->flag=1;
: f; o2 C3 n+ C- C5 J1 i4 p s->next=head;8 e, @. ~2 S; o" ^3 ^* s3 L
p->next=s;p=p->next;
" Z5 h& o% Y4 p- {3 ^2 a8 j }! E# L4 U+ ]. ?7 z0 \& f
p=head;8 z# T) K+ G9 O- A
for(;;)
$ t' x6 t1 @/ V {if(p->flag==1)
/ f( G+ t' }. o* {# m' @ count++;
# x7 {& E, F' ?+ v if(count==N)7 f, ^8 V& [4 i: D' a7 e/ D
{p->flag=0;
! j* c- H4 H {- T count=0;3 w$ x0 i, M+ X: z& S
sum++;}
5 Y! c$ b. r+ W2 U+ g) B if(sum==M-1)
8 W1 f% Z8 M+ l; c break;
- t% R% R+ n2 c( q, R7 o p=p->next;; Z5 Y& u+ a4 L9 C( E0 X
}8 W/ O# G9 W, N Y: C9 r2 C
p=
+ J3 p/ G" K1 T& z* ] head;' W$ |$ y) V, O0 T9 v# G
for(i=1;i<=M;i++): |* D0 j+ T9 H/ R$ ?/ e7 M
{ if(p->flag==1)
, o) j! y2 _: A printf("\t%d",p->number);
# l9 J$ \0 u+ t' H: |$ U( | p=p->next;; w9 r1 T( I+ ]9 B7 E# N2 o. e3 [
}- g- f& \8 o0 ?7 o$ L
8 J; }5 W- B7 D8 [9 W* p
- n' L/ d3 K4 u& G
7 _( Z4 X1 L S* m, u) S: I}
5 p& e' {$ ?$ d* k: e1 V第二种方法:数组) S( k0 x7 s% ?7 W
#include<stdio.h>
5 j5 f: S& F9 j4 J' S* Q# O8 @ ^#define M 8: T1 c3 X# R6 Y m% n* M- d9 Q
struct monkey6 b" P2 R$ P0 B2 \( f7 }& k8 }
{int number;
. Z4 B$ n% c8 v# eint nextp;
# S! Q, N0 M, b* p* A}link[M+1];
) ` U2 h8 S; R! C* p; w6 w) q5 q/ H( R* p; N
void main()
6 D5 C$ D* m' @: p Q: G k{int i,count,h;
$ a. |6 I. K, ~6 N, lfor(i=1;i<=M;i++): c3 V) ^) D1 w J6 X
{ if(i==M)' n F) }, f( c# v5 l0 I0 S: ]
link[i].nextp=1;% \. S4 o9 `# P' g
else3 C, l9 r/ G j6 {% z8 j
link[i].nextp=i+1;6 ]8 n* r l% i
link[i].number=i;
) l; U+ i# G( f; P, r" U}' t6 p4 n; j: N
printf("\n");
1 x7 d3 K. \: c# S. E( ^count=0;
; q) Y3 l% `" t! kh=M;4 `# U+ b. r9 I5 h- t1 q& u" ~# G P( W
printf("依次退出的猴子: \n");, L* J0 G; S2 s! C, J4 f5 o
while(count<M-1)* ^) i: p% I# s' ]: @
{i=0;" z6 B# `; j( T! a
while(i!=3)
/ O) f4 A R* t" x2 Y' b# r* N2 h1 S# u{ h=link[h].nextp;
% Z% \" j4 \3 G2 c' B6 Z3 |8 K( x' @( U if(link[h].number)' \3 \$ `6 p6 s. |
i++;}
' H9 |9 a/ Y1 Q; C, A6 Y
6 d+ ]: J- n5 M, `; J C. {4 \) hprintf("%4d",link[h].number);
& ?5 g$ |) \0 R( n" F1 Elink[h].number=0;. \7 x4 y. r) L a- q
count++;
1 s2 \# C9 ` B5 B# S}
- \3 L& I* h6 Z
" G! @ a- j0 q: t- xprintf("\n大王是:");, Z( T* A% w) Y; k. B
for(i=1;i<=M;i++)1 S+ s; a9 T/ ]7 m& t3 _' o" e! u7 j
if(link[i].number)
, i) E1 Y; N3 E; {; M, d printf("%3d\n",link[i].number);
, k; Q4 W4 @# c8 H3 E& g; k, ]$ q4 j- i% q# m
* g' ^. ]3 g3 W! q j |
} # a4 M! j# r1 D% \% g1 {7 {$ D
第三种是普通方法for循环
! ]' g- I% r' K8 r/ ]; I; v#include<stdio.h>; \. f+ G \( m8 m0 Z: z0 x8 @' ?
void main()
/ R+ |- O' U$ t3 y' k{ int i,k,m,n,num[50],q,*p;
: t1 j( v: o; z8 ^; I6 ]' i, U% L/ }; r clrscr();& E9 n) V% \5 B& o' \
printf("input number of person: n=");
% {1 p: G' n& F7 g1 d scanf("%d",&n);$ n- B& I4 t( Q2 f' v, M
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只* @* [; l6 U& j
scanf("%d",&q);; Q3 v2 c, q' D# z! h
p=num;
5 g/ N, t4 z c/ o/ @) M1 u+ Q for(i=0;i<n;i++)
5 |3 {6 i, _4 U& o *(p+i)=i+1;
/ Y$ q% z0 K) M, g4 o# N i=0;
7 W+ h3 X! G; u. `* o" m$ N k=0;
, t* X! @5 E' x8 Q& V9 Y m=0;" W0 _1 a% s1 z
while(m<n-1)
5 F: K. W& C0 V% J8 o {if(*(p+i)!=0) k++;
, F+ I/ A7 u5 J, @9 J, \9 H, F if(k==q)
, ^- o$ s- S$ o, O( P' h { *(p+i)=0;
0 T+ s! Z: D+ K- ?2 g) ~ k=0;
, G% a: r* I) z! l6 L m++;
9 V/ w' t8 c1 g" l# m }
; ]) P: v7 } l i++;
) J" `6 t. B( ^; L- y E; j if(i==n)i=0;& ]' r3 h. S& l& v3 n; F" c8 K
}
1 o% @3 J+ t) k5 ^! @' o+ U2 Q! g while(*p==0)p++;( B# Z8 K) \3 |
printf("The last one is NO:%d\n",*p);
& y6 U- W+ Y; i- @/ B4 O* e% K0 G" t getch();8 J2 t$ P8 t+ N5 X7 g
# t0 R2 Y; K" n r. r$ E6 g/ b% ^
} |
|