|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 O$ X3 \/ ~2 @5 A2 Y* H- u
这几天我在忙着编一个问题,我用了一种方法编出来!/ e- e z" g& R: C
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
) e; i, m9 r3 E( X2 O注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
$ h: t( y# b# }: x, d. D0 u; k: \. r
5 r2 A, I) ~9 S: i+ e K: m( j
: G' z* Z- k9 U. o" f \ 题目
9 N* b1 h, T+ Y) h山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
# N1 G8 s% f2 k' z9 b( g第一种方法:利用循环链表
8 \( I4 p, h: `' L/ S#include<stdio.h>
( N+ G; Y" P" x2 k; c#include<malloc.h>: A( D, d1 ~# M' l7 S
#define M 8 //共有8只猴子$ [- r2 ?- |$ _3 }* c" a, w2 L$ `2 D
#define N 3 //数到3只时退出第三只2 B9 g/ ?) W# @/ Y$ Q; t
typedef struct monkey' k+ k6 \7 |& A' y+ [9 p
{int number;
) r5 ~! {% f6 A Xint flag;: Y1 H0 S! c$ Q: g& K& J
struct monkey* next;$ @* P) y! f+ X2 E: i3 E
}MONKEY;+ U% U6 W1 ^" \& H, z# e
main()
/ W4 i$ L2 |+ g{ MONKEY *head=NULL,*p,*s;, j. x+ }' x a
int i,sum=0,count=0;, O% R+ _/ \5 s; ^8 X5 z; \
clrscr(); //清屏
/ T {9 ]* \+ A3 }8 k p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
2 j6 x. [! r! N4 }8 p p->number=1;p->flag=1;
8 X6 c2 }0 W; H p->next=head;
' ^) o$ m; @3 R9 v head=p;! @( H8 k Z' T7 u
for(i=2;i<=M;i++)
1 r: y# C4 ?: Y0 o# m% U { s=(MONKEY *)malloc(sizeof(MONKEY));) {3 B+ V) z% r/ r3 D
s->number=i;s->flag=1;
+ q4 \0 O. C: L; A s->next=head;2 W( M2 ~4 v& X
p->next=s;p=p->next;& y$ ?2 R- I# P4 F; m. g% R
}3 @( L! t* H, D9 P. k
p=head;
/ U( m. j) Z9 `8 v0 v, p1 U+ L! V% \# M for(;;), ~3 K' @1 {0 k5 B' r
{if(p->flag==1)% q! K2 X5 ~" ~% z3 E" N" U" W
count++;
+ P; }0 u* B# P' u+ S, ^1 F; _$ e' _ if(count==N)
4 L! G% b$ O& D$ v1 l+ R+ E! I$ Q {p->flag=0;" _& J2 T5 A) p" O! n8 ]
count=0;
* n3 f2 O$ U# \9 T* a4 {7 O sum++;}* _% n5 e9 s! n7 C
if(sum==M-1)
) V1 K4 o- K! b) @6 G break;( b+ F7 x- R! N9 P# W" f7 F
p=p->next;
4 c( y1 X) M. ^- A& I }
6 Y% W0 F. y4 G! }$ Q p=5 T' m/ n5 Z% @# e% K h
head;7 S4 o$ M& p# Q* l$ R1 z% y! s
for(i=1;i<=M;i++)* I" l7 x0 t. d& ?$ ?2 J
{ if(p->flag==1)
6 P1 Y& w: H" x6 F# r printf("\t%d",p->number);& Q9 _' T p1 S+ Z2 h" K
p=p->next;
) K$ u$ s* x& [; l9 f6 S }
7 {! T" ]" \1 J X# {4 u# n1 W. e& E
p1 H ? n( T6 s( C- M% B
; Z. ~2 s. ~ x3 v+ ~, Y4 o) s} 2 C; M' `# `' B- u$ g. f
第二种方法:数组, S0 I8 S( l6 Q
#include<stdio.h>- W7 o/ o3 ?" i& h7 D, Y
#define M 83 k+ |) g8 T/ ]9 f I# ?. Y( q
struct monkey
. {5 s+ n6 z7 n+ j6 c: A{int number;2 t; c1 d/ m7 S/ B8 M6 l6 O, _, A! n" C
int nextp;
$ v' @0 \( g* r' K: a; w}link[M+1];! n0 M- I& k! S) t: W' g. K# Z
: p+ q. y8 A! o c3 c/ n. bvoid main()
; I b6 j. A0 r2 w8 E: G; M{int i,count,h;% W" `% x5 ?* _1 e) ^+ Y7 p
for(i=1;i<=M;i++)! c! S) t0 u% U% @
{ if(i==M)9 C) e/ v+ a0 t2 j/ y5 E
link[i].nextp=1;
; P$ F0 x" U) E. ]6 N! M9 j9 ]7 j else" W, m& X3 k3 U& o7 s3 n, Y
link[i].nextp=i+1;
$ `/ }! i/ z4 W/ \5 g$ E9 T link[i].number=i;! o5 v1 U3 j1 k
}* O. D) |% o: g: i
printf("\n");
9 s& \$ I5 b. V1 V# `; e' d+ Xcount=0;/ X' ?, [- t) Z( P1 R
h=M;
" K- f; a( [0 L8 F. M0 E9 rprintf("依次退出的猴子: \n");
) U" f* S# s! m! a4 d' ~: Q$ P; |while(count<M-1)
5 ?' @4 q3 J O{i=0;8 R$ W, ~& x1 S: @& ?6 \
while(i!=3)
0 V9 |$ ~ X, f3 n{ h=link[h].nextp;, } g0 s' }0 V' e+ f$ L
if(link[h].number)5 F3 }9 J8 \( M0 Y0 L/ u* e
i++;}
' p, p5 [' O) v$ V; o! ~5 U& ^7 a6 P6 L* x- {+ \" T' b* M
printf("%4d",link[h].number);
( ^, W- d8 b+ ?5 K/ c' \0 _9 I7 tlink[h].number=0;$ b1 P7 L/ h$ Z
count++;, Z2 K$ G' Y( ]8 P
}
8 g3 I, V9 h* E# W5 S. S$ B; x, ?* V% @5 N: M3 O0 K6 g1 `6 ]
printf("\n大王是:");
+ C4 U1 l' q; W; K9 ~; ] for(i=1;i<=M;i++)/ S: `; |$ d& s( T9 S
if(link[i].number)7 f! u7 C4 d+ p
printf("%3d\n",link[i].number);
# H6 [0 [0 a! ]5 {
1 ?, m& ]) [+ C0 Q3 T% B0 z) P. v, F5 q' M
} & @' i7 g9 Y# `, ?9 W( r' k
第三种是普通方法for循环, B5 c- p; D6 V- F( ?" `
#include<stdio.h>+ q4 j# P3 z/ [! m. K
void main()
% t; m+ V1 D3 S{ int i,k,m,n,num[50],q,*p;( ~$ |% O( a# @) X% W! Z
clrscr();
6 [3 @4 @& B: m7 H5 }9 k printf("input number of person: n=");
0 W) i/ U8 K, V3 k scanf("%d",&n);: [( F+ v9 p1 u. s% z9 z/ c
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
$ ]" @5 {* ], ]4 r0 R/ g scanf("%d",&q);. |1 a+ n) U6 o5 b; ~* o
p=num;
4 W& @% s6 ^, V6 n) \! S/ B' m" i for(i=0;i<n;i++)# H2 m# S* z% A; I, J0 v2 W- }
*(p+i)=i+1;
' Z6 C0 T; Z) }( E% }5 [4 ]( ^7 z- R i=0;% y, G/ B# x7 H' ?- H- _
k=0;
0 B% O @0 D- d m=0;
" z5 _7 y4 h& J$ T* z while(m<n-1)& Q+ n* J, ?0 y+ Z
{if(*(p+i)!=0) k++;2 ^& L5 f. `4 J0 W
if(k==q)4 F& l( z; W) [, A. U/ G
{ *(p+i)=0;
. e' `/ T, x3 x2 s) V k=0;
4 ]: C6 B5 w5 l, {* x: C. U9 C m++;
( ~- q1 t9 O8 H) G( v* ^4 L }
8 Q% {- N: Y3 K% [ i++;
8 z$ h. s: ~( G* x+ w! R if(i==n)i=0;
2 t' ^5 b1 h; T# J B }
. L. N/ g) I7 z2 A, f3 z* K while(*p==0)p++;0 E0 d6 o9 u% v7 _4 Y; O6 o8 m
printf("The last one is NO:%d\n",*p);
1 K& L6 C% v& ^9 d6 R1 ~ getch();( Y( _1 c/ D% a# h, j% _9 i
) n4 m4 I: f* D2 |
} |
|