|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!+ `2 F+ K1 U% G$ f! m
这几天我在忙着编一个问题,我用了一种方法编出来!
3 _# ]0 v' }1 f3 p1 J但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
7 {3 P& x1 `$ | g注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
$ A+ N9 L$ m' [# r% p ]
2 _- G0 M0 w: Z+ r3 B0 H# A
% b% G0 S- O+ h$ ?$ R 题目8 E- }0 D" R0 C( C
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% `( \0 h$ j% h# ]6 O第一种方法:利用循环链表
, k& y7 T; q/ `1 N#include<stdio.h>
* n! i9 m; t e# y' u, J#include<malloc.h>) e* I# [6 _! E7 E% ^; u& o e; M
#define M 8 //共有8只猴子
1 k4 h/ ?9 p0 c0 W, f, ]#define N 3 //数到3只时退出第三只
0 m" M# E" S/ ~. Itypedef struct monkey
2 P9 K v8 `" ^) B2 W( K{int number;* a& A- }" S! s
int flag;
: P+ @0 V, J3 z% |! Gstruct monkey* next;+ X7 `& X( m% G$ s- Z5 a
}MONKEY;
& b0 h: u; _2 P9 h; |3 M# P- pmain()5 @2 K# ~7 P) X" q! N" V$ ~
{ MONKEY *head=NULL,*p,*s;
5 L, x: I' O3 D# T int i,sum=0,count=0;0 I4 o$ l: R# `7 N* k$ l( A
clrscr(); //清屏7 k# g( f1 I o( n+ i8 O, ^" M
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
V, k! W7 M) L7 O/ M# R) G+ T. T p->number=1;p->flag=1;
9 a9 q" c8 j6 w& c- r0 \ p->next=head;
( C" g/ V9 K2 s& H2 K head=p;
2 ]+ ?1 L# g9 U; Z# J8 H: [ for(i=2;i<=M;i++); J: _6 s+ ~( Q8 v+ E5 u' A
{ s=(MONKEY *)malloc(sizeof(MONKEY));
P+ {+ |+ \ h0 X s->number=i;s->flag=1;
2 Z+ R! ~3 ]3 p; h7 i9 j8 C s->next=head;' e$ Q y. P4 K) K7 l/ w& a
p->next=s;p=p->next;
3 W5 V/ l H+ ], k; T }; E* ` F7 L. [5 v
p=head;
; k/ g$ Z+ C( h9 L for(;;)" v0 f* B# x( s6 m7 ? B, }
{if(p->flag==1)( i+ G4 F' F6 [+ N
count++;
! J0 e( U% X) e( F( h. G if(count==N)3 s7 m- G2 j+ J5 i4 s# l) F. Z# C
{p->flag=0;
8 b0 z: [7 M: e2 z count=0;* J, }, O# L) W1 q$ H
sum++;}8 y2 A6 e" s6 M' b) W g
if(sum==M-1)
1 @- }! h# ~7 f# H break;6 q$ g) P; _0 u% m; q' l4 f% {
p=p->next;
5 B- x7 }( W5 j5 S+ m, b$ A }- b0 f2 G" ^+ B; s- A& G, a: u1 b
p=9 F3 V) L# M) K% R. \
head;: C- O5 E, ?2 V0 W' W1 K
for(i=1;i<=M;i++)
, Z6 x- q5 G; E! V0 s( D { if(p->flag==1)
, j/ d& g" m* N0 X3 Y printf("\t%d",p->number);! K2 W; S5 x* L! o9 j
p=p->next;7 K; \8 j- S0 W
}
$ o: m0 v' Z- G; R1 _
0 o3 Y) `( A, U
# A6 B, J/ U+ X- A: Q
: b* ~/ h+ H. ^2 R}
( I8 {: Y( Z6 _/ k% {9 t9 r' F第二种方法:数组
6 U4 g! w+ `* l6 E: ]#include<stdio.h>
/ X- }7 C: Z: w/ M+ _ d#define M 8
; z3 T( V% z2 [+ v" m. }4 \struct monkey' ~' C j3 W0 \6 n7 {6 d/ T9 ~
{int number;9 ^" x( D, D! w7 c8 ]
int nextp;
) H0 D1 e0 ], N8 ?$ f* @}link[M+1];
. @/ J8 Q: c3 V; N6 @. c
8 U3 X9 |/ w3 ] r i( @7 ]* kvoid main(). H, F, x C) ]1 ^$ F) J N
{int i,count,h;' j7 h/ I# b L% H# s# Z+ n) O: U9 j$ N7 S
for(i=1;i<=M;i++)! h$ }6 N* `) ^1 \! g4 b! |: T
{ if(i==M)# ^3 I a2 y e6 {" u7 p! X
link[i].nextp=1;
4 W; v8 L4 S/ v/ q else
; p" U' k- D' o: B) S6 z* z link[i].nextp=i+1;
$ k7 ^& x" S; i* J' H link[i].number=i;
! T- \0 ?8 R3 u1 T' ?2 h6 l3 C% W/ C}8 E: y/ s3 j* f! A( e
printf("\n");
7 d3 d2 s* y! ]% t7 k, o3 C- K0 \count=0;
* h6 X6 g6 o! s: Mh=M;
* \/ ~5 ?1 g5 s3 e" U% M) kprintf("依次退出的猴子: \n");
* b! x! G& \. n/ `1 xwhile(count<M-1)8 p) \2 u$ a+ ?
{i=0;
9 Q+ C7 u* P# ~; N( w9 Owhile(i!=3)% I: f+ @4 ^* e9 \
{ h=link[h].nextp;: C' H3 m+ }" ?; h
if(link[h].number)8 ?% o4 h" }2 e/ S* k$ X* W* _9 y
i++;}6 l N1 {: ?# N1 r
. n0 y0 w. p% a' A, zprintf("%4d",link[h].number);
6 P$ ~, H* K+ x0 z. u; r6 Z; hlink[h].number=0;8 v) Y, G5 H! a( W; X1 K
count++;
+ l# o9 p2 A- t' P9 c}
# r5 j4 y$ ^; l" U$ O5 ~6 _+ b; {2 y: P, O
printf("\n大王是:");
: d; H9 ~+ W# P2 y for(i=1;i<=M;i++)
; o { C* g$ \) b1 Z6 J; x9 u+ n7 y if(link[i].number)
{+ H* Z/ L# n: }7 P9 f, X' p printf("%3d\n",link[i].number);
" P% e3 }$ d* Q6 l# C
* `; b5 C$ ^/ w; q ?# _1 X; Z4 N
) }9 |% g' j" A: m# T% _} 9 u/ U& a, F7 ~1 Y* V
第三种是普通方法for循环/ _$ B) O. o* P
#include<stdio.h>/ U/ y& a6 N2 A) H: [* q
void main()
$ a+ C& f" @* ^$ z{ int i,k,m,n,num[50],q,*p;
% M B2 E) _, [" ^ clrscr();
& ^, q3 B$ F& W9 V' h' w printf("input number of person: n=");
, Q4 R' r: v$ u V2 y& d" ^0 ~, t scanf("%d",&n);) r) U. P/ |" K& H6 e& j9 K8 I1 |
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
# Q; z' a# }3 l" u( G0 G scanf("%d",&q);& X( w) @3 P! e f2 A* r
p=num;4 q8 g) R; r, K: N0 L* k
for(i=0;i<n;i++)6 X1 k: `* g4 G) V
*(p+i)=i+1;
- n. K+ q! T3 ^. K2 H1 J: C i=0;/ Y P+ M, d y. W
k=0;
/ r+ ]" h: Z. K" ~/ Y T m=0;
: I) X2 w. q6 c while(m<n-1)1 v! f/ K" V! p
{if(*(p+i)!=0) k++;; `; G1 k8 R: W* }7 }$ I4 C
if(k==q): W9 l5 d/ |) H7 w3 _5 s' k) Z
{ *(p+i)=0;. U8 ^) e# i, m0 W% j/ U, ], |
k=0;) R% A9 p3 V" `( t& j# ~7 B
m++;' s9 z$ A# \0 _1 L; K. ^ V! q
}+ U* Z) {5 c# k( Z8 }
i++;( f" {7 x0 f' T9 R
if(i==n)i=0;" j0 ~* B5 h6 g/ q9 ^% [7 ]
}& H+ i9 E9 F4 V; U- z7 L7 Z
while(*p==0)p++;
6 B; }5 g5 y7 B u8 M printf("The last one is NO:%d\n",*p);
4 M" }% g* c+ c8 a6 t0 l1 N getch();
8 \7 f9 M2 J# H2 }* c0 f" h7 G1 ?7 A7 i. ]: J
} |
|