|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ B1 U8 U0 Q4 J, o0 q这几天我在忙着编一个问题,我用了一种方法编出来!
5 H7 W! Y$ L5 y: h2 r, b0 g但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
6 M: k" }9 Y. p+ O. |注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & N- ?6 h- G3 q, [' N
3 ^4 r$ w; L- _/ q
& ]! T0 ~* M- d' S3 G: n 题目7 \$ ^+ I9 X7 f" x) t+ B4 y
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。& M x1 v% Q0 e
第一种方法:利用循环链表
, t. Q6 j! _" Q( }#include<stdio.h>
w0 A, X# d1 X8 x5 e1 V& L#include<malloc.h>
! y. B5 f0 F4 g6 m/ k4 }7 Y% L#define M 8 //共有8只猴子2 I: _( \- `2 j. x
#define N 3 //数到3只时退出第三只
4 T- ~% g* o) _$ n4 G- Qtypedef struct monkey
/ {5 T$ w0 J" s9 j, n4 F{int number;7 d/ A6 C: n& b N k) t
int flag;
$ ?4 `/ a. s' G) @8 P/ U- |struct monkey* next;& @1 F2 E, M6 S: Y; r5 B5 ] C+ d( X3 Z
}MONKEY;
) a4 {4 f; V; smain()
# I/ R2 |% o- i! N* U, B{ MONKEY *head=NULL,*p,*s;
1 e2 C# T2 r! s) R& O. p int i,sum=0,count=0;
F1 b4 i, }& `' G8 P clrscr(); //清屏
) c. U+ o2 v Z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
& A3 J Y. ]7 A; A. A p->number=1;p->flag=1;
/ C7 C! Z/ }7 m1 N k3 W5 n4 b3 P p->next=head;
, j7 G1 m' q" L' f4 s; J head=p;
. g# Q+ v8 x. t9 Z, k- C for(i=2;i<=M;i++)
# G4 u- D2 f0 c0 O9 n+ I! L: y { s=(MONKEY *)malloc(sizeof(MONKEY));
5 V' s2 ]9 h8 [) \ s->number=i;s->flag=1;9 c4 ?( U. J2 L) m
s->next=head;
) J$ ?, b4 Y, E) t4 M p->next=s;p=p->next;
! H) P2 X" L3 L, M! N6 O2 K( y }
2 W" W1 o) U/ V) J. w- ^" Z. S p=head;7 D8 Y: l# z+ c8 U
for(;;)1 \& X% e( S$ Q& [ y
{if(p->flag==1)% J. K" e: l0 G1 j
count++; k+ R8 V7 i& I: x N5 K- I
if(count==N)
0 u3 ?7 m3 {" |8 q& C {p->flag=0;& z# f- v! F$ @- `
count=0;
- h u6 {5 g- V6 _$ X sum++;}, G* q5 [/ v" M
if(sum==M-1)
0 P0 l8 B, j* i! A! B break;
' G- I4 s" \# ?& z2 ]5 X p=p->next;
9 r* N+ S9 t+ c& S }
) J, Y. p- P- z3 ~5 o4 H, |1 C p=
; b' I) L$ m0 X( i: M head;$ i: o& ^9 o |& b, T) O
for(i=1;i<=M;i++)+ X- e) ^5 w" e
{ if(p->flag==1)
" F# _3 x3 [8 o printf("\t%d",p->number);- u# H5 `. n n% R- l5 ^2 v
p=p->next;& k8 M3 _9 i" F+ J4 Q, X7 W7 B5 u; u
}* Q; @2 L4 ], ]5 @' }/ b: N
" J1 s% ~7 m; ~! Z
9 i4 k. c6 Q4 w8 q; Q D! e& X& i& V" s9 ~7 @% @2 T* y/ y' V6 H* `; `
}
5 N: t. q' R) s) S4 L第二种方法:数组
8 y' `3 |1 n0 m& i#include<stdio.h>
1 S% A& p# h1 l8 _1 C4 r) e* C#define M 8, B% Z4 }' R% U9 _
struct monkey( q9 e9 a9 E( p& g0 y" ?; Q2 ~+ ]0 }
{int number;1 M' f, p5 l3 A: W: I4 O; H
int nextp;" x2 M3 C$ o2 \2 `; D1 `
}link[M+1];
% v+ `. b. \" d$ x( u) p; I( G! K, t f. ~' W3 {$ v: V* c
void main()
& S$ y: s( M$ Z6 a) h$ Z$ K{int i,count,h;' M+ Q8 s8 Y7 W7 F' e, L/ d# H; l/ c
for(i=1;i<=M;i++)
" F# s7 ~9 q% ~% T" `7 _% G{ if(i==M)2 ^. `7 K2 R2 Z! n- Y. U$ s
link[i].nextp=1;" s6 R8 u. s4 X d }7 S9 i
else
0 K5 R3 W$ t2 v4 }; d" d link[i].nextp=i+1;
y j c: `# i P7 `) B+ N link[i].number=i;
8 |- S/ ~* `8 K}
! u# v( k5 R H" |+ e9 |! aprintf("\n");- o/ x, g* i" _- ^! d/ {3 A/ V
count=0;# s4 w! y; N: c
h=M;7 U0 h. S& S# v; N
printf("依次退出的猴子: \n");+ {' t/ d6 E0 r: G& n
while(count<M-1)
( T" o" e8 a4 X# s" Q5 ~3 d% D{i=0;; i' _6 K3 u$ `6 O6 _. b
while(i!=3)5 q* m, I4 F) k3 t5 t
{ h=link[h].nextp;2 |/ l& |$ X0 i0 k7 ?
if(link[h].number)
% n: q: l: {' a, K" o4 c9 T i++;}& J& J7 m6 K, H( K! o9 t2 K
( f: R$ c9 J4 `4 W
printf("%4d",link[h].number); B6 X, g) j+ ]
link[h].number=0;/ `$ x' x4 n1 q+ L7 J
count++;
, f- z- S$ h- t. g* G}
" l7 A+ c @- P4 R0 ^
0 M$ g ?' v7 Cprintf("\n大王是:");* D6 N, ?. E1 [! I$ ?$ ~
for(i=1;i<=M;i++)7 p2 d; z b, Z; H% I. x
if(link[i].number)' R+ Q0 c2 u9 g$ [4 e u
printf("%3d\n",link[i].number);
1 @ l& a: I9 b. H5 N, b
5 q! {: }& U7 X7 r/ u5 h* ^+ b' @6 d
} # b( N5 j# p& }6 M
第三种是普通方法for循环
' n& L# k. K$ l I* a1 t* y9 h#include<stdio.h>
6 N1 i( B* j6 h+ r! \- Mvoid main()
& V3 j% r) b$ X( L" z( A) o) G( n{ int i,k,m,n,num[50],q,*p;% s4 l/ s1 J. A, ~
clrscr();
/ H; k" p6 S; E& U; G/ V printf("input number of person: n=");6 l. f r. L! S3 X
scanf("%d",&n);
0 w1 f; o2 I8 l1 C6 dprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
! c0 t" S, W% h Y. O- m& }3 N scanf("%d",&q);
1 C Y% Q, X& C1 E( r p=num;# Q0 }0 h$ @5 p( @0 ~- X x
for(i=0;i<n;i++)+ H5 h8 O8 E5 C; m( H8 X+ u
*(p+i)=i+1;
6 B* p; T3 o% s6 `& `: P i=0;
4 E# q8 R% F0 C6 _ k=0;+ S' J3 K7 ]$ i n
m=0;
6 [: E9 S+ n) `0 d1 V while(m<n-1)3 ^; Q2 W$ ]1 f! C) U( ]9 X: D) w
{if(*(p+i)!=0) k++;
& u) D1 z7 _$ |- A! Y# E. [9 z4 p; R if(k==q)2 j. d% B' t& g! E6 K( Z$ n
{ *(p+i)=0;
! g X; R6 Y1 O( L. ]5 P7 ~! { k=0;
' w5 o* s; U& B- v6 h+ ^1 T m++;, \" q5 V; A, X2 ^* O) h* `
}4 A$ a1 f$ i; T
i++;+ Y5 q% P: O+ C& v6 o/ p( m* S
if(i==n)i=0; p% {; ^) w& _% F2 [% b6 w
}
4 x5 a& p- F( T7 n) [8 g while(*p==0)p++;/ i- Y9 F' C% e2 p$ e$ y; p6 o
printf("The last one is NO:%d\n",*p);
1 ^! D) }, D. Z2 d getch();
) u4 W" B: g6 K2 H+ k, L+ }
8 _) P" v( c7 P9 B: ^2 n! x* T2 T9 Z} |
|