|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!" T5 K4 s0 U3 s/ p* }0 [
这几天我在忙着编一个问题,我用了一种方法编出来!
/ v" d; w( b7 i5 X但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!/ }5 ?: K- }8 S! {$ Y
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 - Z& N, w( v' f( ~+ c. J" B, {
* ~9 [) F- y3 T9 r/ P9 h1 r7 _1 L- F! @% |* J) h! v
题目* T+ a% m; x; Z( M6 b% K: I% |' J
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
# ~1 h, |7 r- J: N第一种方法:利用循环链表& i2 e8 b4 _" J9 ~
#include<stdio.h>6 S" P/ G4 N2 L7 p0 s7 l; F
#include<malloc.h>- r- l8 v: A2 Z" f
#define M 8 //共有8只猴子
4 R! J9 `! |2 \% h+ `#define N 3 //数到3只时退出第三只
4 J! L6 n, O3 j$ @/ Ztypedef struct monkey+ \: j+ _, w8 a4 M. q
{int number;
& W2 d6 t' X ~- Q# cint flag;
, K* ~0 T9 z% G# a. `; @4 gstruct monkey* next;8 z3 |0 l* y" _8 d# I
}MONKEY;
1 {9 p! ]7 `, m+ s$ e1 Y/ Hmain()' u. K, u& Y6 ]8 ~- g2 j9 [* y
{ MONKEY *head=NULL,*p,*s;. a# D* K1 j: f: O- m# l
int i,sum=0,count=0;
5 y- \+ {% e2 b5 R2 I+ I5 g clrscr(); //清屏
$ i1 [: C9 E" M0 l. _ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
% q3 E( |3 [: G p->number=1;p->flag=1;: ]/ k# N& t: A5 X. l# R1 Y
p->next=head;
$ U; s: g8 N0 d9 x9 G head=p;! _8 t7 } x8 D! ?/ F
for(i=2;i<=M;i++)0 D, f; i5 F$ M
{ s=(MONKEY *)malloc(sizeof(MONKEY));" Q, i1 j0 G9 a
s->number=i;s->flag=1;. [6 W) @' j6 m N
s->next=head;
6 i$ G! X: \" X% u p->next=s;p=p->next;
: g1 M. G, [6 `; C7 w }
; w% e3 i: [7 o( m3 h9 S I p=head;
1 @1 h0 K7 E( N7 C* _# H for(;;)2 W* l" u9 N) M/ d2 U
{if(p->flag==1)/ h v- N5 A& v
count++;& e/ Q0 _( u, u" h" L6 @$ n) h
if(count==N)7 x( y. g, R5 A. ]$ @
{p->flag=0;' y+ G/ r* G) x9 h
count=0;: P* T" z$ h$ g
sum++;}! {* Y* w) t1 Z
if(sum==M-1)3 u3 n; Y% F/ Z; m; z3 A
break;; W" _, v( w0 t$ E
p=p->next;
8 A; C$ w* ~% V" }* p6 P: C6 p }" r& f+ J, g4 w
p=
& ^3 n8 \! f( P0 n head;( [4 Q% h' Y$ X* n+ I( z
for(i=1;i<=M;i++); r5 V4 d2 T% E% h1 C$ _
{ if(p->flag==1)/ v, J% I5 x) ], M% `
printf("\t%d",p->number);
5 a& ~& w" @# D, U p=p->next;
! \) t: s3 O0 a' V! o ?/ i }
8 {! z& A+ i! i/ ]) c
, b8 Y5 o( ^/ z- m& E, ]' t! Y$ K0 ^0 ]+ F4 H2 P
+ g: b9 ]: e* e( `/ T
} - ^& r' o! E: |
第二种方法:数组
, B7 P3 Y5 j3 a#include<stdio.h>- |5 x, c" N' N- K m7 T6 S8 N0 P9 Y
#define M 88 s3 X4 c8 M: x$ `
struct monkey& F# Q, M! |7 [6 i, m! u
{int number;
5 n, D! Z: ] _+ U& rint nextp;
- I. L' A3 h/ ~( v}link[M+1];% O! A- H" y1 ]9 M; x7 H" A( v
5 q$ A( |4 ]( B4 R9 N$ x$ G- {0 n: l
void main()
; e- `' Z0 h& J( k{int i,count,h;
2 ~' P! }2 N0 q, G; M7 H4 nfor(i=1;i<=M;i++)
( ~" C4 e1 K+ H( J' b( ^6 v$ g{ if(i==M)
4 N4 j# J. [$ G/ X link[i].nextp=1;# @ d) ~+ w( t# J0 m: L4 l
else
9 y3 S2 A8 Z! w1 Y( L8 J- s# b3 X link[i].nextp=i+1;/ T9 K/ r2 L* P# _1 \, t
link[i].number=i;
# K8 b X( Q) t8 q) s. f}
. j9 p, P0 p6 X' p! T# L1 jprintf("\n");
9 Q Q& v+ U% K1 u% Y' i! N1 ecount=0;7 z! d, f: E2 r Z7 d
h=M;+ C/ \1 b$ y4 Q5 |
printf("依次退出的猴子: \n");
: y3 \/ K; @" e' {' G( K( J+ ?while(count<M-1); r- s0 \3 C7 ^$ ^# i% y
{i=0;
; u. u& e, _7 c4 _8 n( _+ K2 w7 ~while(i!=3)
& u& C: y4 _. M, V{ h=link[h].nextp;" B9 M, D+ a u n L
if(link[h].number)
# [" _5 a6 g2 g+ U i++;}& K2 M7 b* o3 ^& W# X
( r- y: D" k( |. t3 V6 n
printf("%4d",link[h].number);" T, _0 b% @2 O/ [1 ^
link[h].number=0;
v: a: P! c0 h8 q: e" Kcount++;
8 e" n& L: i& h9 U: l}- r& k `8 N9 [* @/ R& O: L; j
( s$ x9 S1 f( F8 O* M# S2 F3 V1 @printf("\n大王是:");( m% V" A4 g$ p$ n6 E" j5 d
for(i=1;i<=M;i++). e" ^4 c0 T' `' O
if(link[i].number)' d7 x' [( \$ G9 s) {
printf("%3d\n",link[i].number);: q" n- H/ }" y, v8 j
0 [9 i5 c& \2 \& f" N+ L7 e% v) e& r- q, ]0 L5 Z2 w; R: z
}
" @4 b; x) C1 U# V/ w& o第三种是普通方法for循环
; C1 }; b( e, ?, d3 _* C#include<stdio.h>
8 [* o" O a9 |$ Lvoid main()
3 d3 d, H" W! S4 q$ w0 t{ int i,k,m,n,num[50],q,*p;! k" a0 e2 |+ W& n( R- ]7 U8 Q
clrscr();* c6 F% D8 f, ]/ d4 {
printf("input number of person: n=");1 k/ P J' g# R$ u
scanf("%d",&n);1 v: B# n! U7 J" x
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
2 ^1 M, L6 E# H7 i' U, H; b' K! Z! ? scanf("%d",&q);
; |0 T. A1 ]+ | p=num;# l% \. E, \, b: }
for(i=0;i<n;i++)) ] c# `& q$ i, v# o) S. o
*(p+i)=i+1;
% x1 w4 Z6 E7 `5 v4 R, i i=0;- O$ G0 D1 l; H8 q, B
k=0;$ }8 |: r* L0 l0 l' _
m=0;
; I0 @5 H4 Y2 U$ y; ? while(m<n-1)
+ o. G0 `: V8 |/ j% }3 \5 m1 D8 m {if(*(p+i)!=0) k++;
# |/ i/ u4 G3 I* ~3 p3 R H7 x/ R$ B if(k==q)
' u0 n- v7 ` S) o5 @5 G& y { *(p+i)=0;' Y& i' X8 K3 V' F( h
k=0;" B, q( t6 Z j# R0 i* m( [* Z7 X; S
m++;
# V7 {3 X( }: g R: z }
3 I6 \! S0 H* P# I i++;
% w! K0 x" O) J( t! H$ D: O if(i==n)i=0;
! N6 I) j+ E; i; p4 w; r }
& H1 |4 B5 ?2 Z* a/ V; P2 g while(*p==0)p++;5 E. v P) V1 \' Y( k
printf("The last one is NO:%d\n",*p);
4 T: M( n8 u1 I) F) I getch();
7 d# k N; ]8 [9 ^6 v n2 {, r& y0 k6 m. a5 \3 C# l$ z0 g' N! g4 H
} |
|