|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!/ T9 B7 U- V6 d( x5 J% u4 b+ `
这几天我在忙着编一个问题,我用了一种方法编出来!; A# f* n, c& X9 j, s; L
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!% b! R4 s c3 b! W$ N. V* v& U
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
0 E* q8 u3 j: o7 ?; }4 `
$ D5 ]( u! q6 _6 K
: S. S* L. T% D5 q- T1 p: g' C 题目
. J6 a" B3 y0 e6 [0 B山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
5 H% ~; q7 I) w' y5 D第一种方法:利用循环链表
# L+ v! p4 x6 Y! Z/ P9 l2 x& V. A#include<stdio.h>. r# U) u- F4 ]4 g; p
#include<malloc.h>
, L3 Q: e" ?! a) Z2 p9 N$ I9 Z1 G#define M 8 //共有8只猴子
4 t% f/ v5 f) }( \3 G4 [3 d; }+ ~5 H#define N 3 //数到3只时退出第三只
; Q7 o6 k+ t$ O8 l3 xtypedef struct monkey2 V- z7 I. f) K5 K
{int number;
0 B/ Y6 ^: P: ^0 i" S8 E" X' f8 C# {int flag;
W- J- u n9 |4 L% Xstruct monkey* next;
3 W3 h. B+ _# |3 I/ |}MONKEY;
/ Z/ |; Y. q/ omain()
0 `9 n' @- _% V: ]7 v! Z{ MONKEY *head=NULL,*p,*s;6 O. \7 t' f! p1 F
int i,sum=0,count=0;
5 m( `0 x7 o8 R8 J( z. k: @ clrscr(); //清屏
" d. s. |7 }% v p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存) |% u U' l0 o) Q% [% P! m7 f# L
p->number=1;p->flag=1;+ N' i( {. K9 ~8 k) k6 }% v
p->next=head;
' T8 C$ L6 c9 m head=p;
6 C' @2 h4 J0 P1 j; p for(i=2;i<=M;i++)
/ g' X% b& u, N2 z# G8 G' m { s=(MONKEY *)malloc(sizeof(MONKEY));
& Z" y9 `' [) F5 _5 t( L6 C c s->number=i;s->flag=1;
4 F2 `4 x# s+ f, W, `4 o s->next=head;! T1 ?5 \5 }4 ?
p->next=s;p=p->next;* m! b& n. k; ]( B+ G; a) _; J: T
}# Q4 a) Z- X5 z' j5 _
p=head;
% c6 |3 c4 K% c# Q& M6 c" J, x for(;;)
u" p* F J6 }9 Z7 f1 z. Z0 c {if(p->flag==1)0 j/ B) [3 m' g# g; H
count++;
# J5 I) X% A. h. ~" ^ if(count==N)
+ M q; c4 J8 S! ^1 u {p->flag=0;2 O1 ^5 `: S3 s% w' k# c" l
count=0;
. `) e3 A. H6 n5 d o1 P/ Z sum++;}
4 x# C, k0 G. ^& `+ k4 [2 e# y if(sum==M-1)
* p! r: r, V3 U- e! B' M+ ` break;
/ R( M a4 B, \) L& L p=p->next;1 f$ Y; [* T6 D1 T8 b; I
}
' ^3 R( |& [; O# x p=) \# }5 x4 P" f# q) U$ ?
head;9 w9 @, k* @! S5 o/ N" G p) d/ w
for(i=1;i<=M;i++)' P6 q5 H* A3 V _+ s
{ if(p->flag==1): y {* V: C- e+ F- L; A
printf("\t%d",p->number);( {, c8 F# _. ?4 g" i7 C# |$ q5 z
p=p->next;- Z9 o3 q6 T; @% s' v0 {
}4 h9 e8 ~/ F2 Y+ C( w5 ?
& k0 I0 d& M9 H$ m$ J* X
/ w' K& m$ Q$ {4 e8 W$ ~6 {4 d) a. A; [' J% d
}
. f) u t5 _* z第二种方法:数组) e" Q' Q0 M. f, o, ^4 Q, E+ Y
#include<stdio.h>
& W' V" S) F5 R: f$ L8 b( X#define M 8, j p+ q/ P; h9 G1 v
struct monkey
0 k6 z1 J1 }1 I. h- }{int number;
t1 Z* z6 N& Cint nextp;
$ T9 v: l) G; i/ V: u8 v* M% D}link[M+1];, @. }( X' q( \/ N- ^: l3 j+ Z
! N& n8 n* }8 p
void main()" s! X% R) _6 z/ m
{int i,count,h;
/ _$ g/ r. ~. {+ Z" t% xfor(i=1;i<=M;i++)
6 u a0 E& j k{ if(i==M)
# x# w. h# d' i2 J, a link[i].nextp=1;
* P: g( s, D2 l* h2 c* G+ I else6 B2 u8 S U; X1 @9 J% p& B2 r
link[i].nextp=i+1;
/ ]- `0 }4 X2 f8 e1 ]6 K link[i].number=i;& j( y; s" `: v! p
}
& q' {: E6 F2 i4 fprintf("\n");5 b- l$ A+ \2 k. H2 Z
count=0;
4 r7 | j0 i! a3 t6 gh=M;
1 } g7 d9 S% h4 x9 W+ Dprintf("依次退出的猴子: \n");7 x- l* p* u1 N; ]& F$ k
while(count<M-1)
6 D+ X% k! G/ r{i=0;
0 e( W8 w' p5 R5 kwhile(i!=3)
0 t: u4 ]( N$ ?{ h=link[h].nextp;( O7 F# J. \3 Z' P
if(link[h].number). x. `, P" A& {
i++;}' z2 w9 j" \1 \! Y# S6 \. x: `
: m1 z; `9 Z" u. q
printf("%4d",link[h].number);
# y$ u% G) {# Q$ y" R( _& f: ^1 klink[h].number=0;
8 Q0 g8 j( [9 ]8 H) g% s6 Zcount++;
: F. B3 M B( V9 t}! ]& K0 j* m8 k1 L
( T% t/ W2 m$ m7 Q' h7 H- t
printf("\n大王是:");8 O# \4 ~$ q; F1 `$ d/ q k
for(i=1;i<=M;i++)
7 C+ O5 K4 k' L: Z/ N if(link[i].number), Q! Q, Z ? _
printf("%3d\n",link[i].number);
1 s/ o$ B: D1 _; [; ~& B( V6 V5 C: b& v
8 \ B. n( \( H& E+ T}
7 @$ \1 I# V+ x$ ?- a- t第三种是普通方法for循环1 j7 Q& I" F! Q9 m
#include<stdio.h>
, f) Q3 V9 ^3 N7 N0 Hvoid main()0 x! k9 |, t& L3 |5 E
{ int i,k,m,n,num[50],q,*p;) n& \+ P1 j4 Y
clrscr();0 T. k; n) U! y- T/ P
printf("input number of person: n=");
( u) S8 P$ W% b scanf("%d",&n);
" j$ b E5 v) U" {1 J" fprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只4 R3 p7 ?# O! x8 x8 B. r5 b. O2 t' E# ~
scanf("%d",&q);# r e) O5 [: G
p=num; I" l1 H* I( n/ M
for(i=0;i<n;i++) B: b( U$ O. y* k. \' E* W
*(p+i)=i+1;1 }, ~0 I: G, M
i=0;8 J- {8 X& O$ V2 i: A/ v' b
k=0;% i9 x& f% g$ f0 X& @* w
m=0;4 t/ l# `1 O- k/ Z% M4 s0 v0 }
while(m<n-1)8 m2 M, r0 m% i1 j2 w
{if(*(p+i)!=0) k++;
8 u3 q9 _0 D3 P: `6 o/ q if(k==q). Q6 }3 y" J( G: E/ c( H' B
{ *(p+i)=0;
& d% D7 N+ `# j( e0 r k=0;
' M' U8 v. \" |) @: _" I- f7 a ^ m++;
: Q& w3 T0 ?, p% x& l! V6 a, E/ p }
% T& G, H, L. x8 }( T8 E* @ i++;9 N% P) A" Z: u0 Y
if(i==n)i=0;
- Y; J$ ^( E- J( v. p' w# Z } Q1 _3 ?- Q# p+ d2 Z
while(*p==0)p++;' c |3 Z2 V8 V
printf("The last one is NO:%d\n",*p);
) n* R! A% b" Q- x" F, I getch();
- f" x9 } |0 u, m8 }% C2 i x& U% s. o
} |
|