|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!7 O K( L" J0 U0 u/ w
这几天我在忙着编一个问题,我用了一种方法编出来!3 L1 F- A: F/ A0 J, ^
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!9 N4 n3 y& J0 j: O( O ?
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
- z; \, i4 S; K7 [5 L4 r+ M9 U' ]- o, O2 Y. M/ W/ `. d: ^
5 A- P, u$ p" J
题目$ d" c: S# n1 \% Q5 V" a
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
R, p; J, v+ k2 ~$ `- O第一种方法:利用循环链表
( |8 j- o* m! R2 U5 e/ t#include<stdio.h>4 L1 \9 @# J/ f- c: t4 [, Z
#include<malloc.h> s3 l+ k4 |5 L( \
#define M 8 //共有8只猴子
; E: ?/ Q! Y- |8 C1 Y#define N 3 //数到3只时退出第三只6 O& b' x0 R, P/ D
typedef struct monkey0 F' E# R( [# m
{int number;
' z$ ]. ], `" g" k# pint flag;
% r/ x( \4 ~ l) B$ q# wstruct monkey* next;; N! e4 T% H+ t* q# \) M
}MONKEY;! j+ d9 R# x* S' {5 U9 \7 k: n( L
main()+ H2 L6 Y( {9 _% B
{ MONKEY *head=NULL,*p,*s;' ` ` `4 e6 ~% ^
int i,sum=0,count=0;
2 j0 U2 ^+ j& u clrscr(); //清屏* Y6 ]2 X5 H+ W* X* M
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
7 C% B) T+ v; G8 Z# Q p->number=1;p->flag=1;
( X6 S# b; @8 O8 f, ]- w* n p->next=head;# n3 x4 r3 B6 B- |% i
head=p;
$ {) ]" K( ~$ Q" V& F for(i=2;i<=M;i++)
' ~' \+ B3 z4 q& D# d- s { s=(MONKEY *)malloc(sizeof(MONKEY));
/ |2 k% ^3 e; @: x- y, a" i s->number=i;s->flag=1;0 ]* |9 p8 _( W1 ^
s->next=head;0 l1 F6 b: G5 S, s4 i: T$ j
p->next=s;p=p->next; g3 v) I: Y- o" i! k8 M
}7 K }4 w2 @1 S3 M
p=head;" q8 Z4 s# y) p8 J4 k& v
for(;;)
5 g( U5 E! _+ H; c+ q {if(p->flag==1)
5 D# F- n A6 x0 K count++;
, c- F# l; t* c: {% j9 G if(count==N)- F" y& P. ?9 P7 f8 k
{p->flag=0;0 o6 H; U, _4 g+ l$ g
count=0;
# [: }, c! q# d: K' R, t0 l sum++;}
' V/ s8 ^) d0 y if(sum==M-1)
6 V. \$ e `. J# Z, \# n. e break;2 X6 w. |4 e1 M6 d3 v) b
p=p->next;
' W* H0 p( \7 o1 n% j }
3 t' A& |$ m& W p=
3 @" y. D6 ]6 M" a2 \ head;
- K# a/ |# F* h0 @/ ?8 p for(i=1;i<=M;i++)# q& V( \( O4 r/ i2 K- E
{ if(p->flag==1)
; E. j) b: f& I* S( B printf("\t%d",p->number);6 O( M) l% ?( `. D0 M
p=p->next;
: P& I) A% F+ v- E" e$ Z }1 x$ B) H0 q2 K" `
' z) W* q% K! X5 G9 R3 k9 A* R9 T7 ^1 q
3 ^$ t/ x5 h" }+ ?6 O4 r$ F: R}
8 w/ }+ {0 m$ ]: J }+ Y第二种方法:数组
9 s1 K7 R/ K5 P" o% Q8 [#include<stdio.h>0 X# {3 \- S8 X; E" E! h/ E5 |
#define M 8
! {9 o& y& T" e6 S" x( T5 zstruct monkey
, T- B" G- q: E& M" T, q4 H{int number;9 V! G: Y; N0 s
int nextp;
3 r5 ?6 v& P" T}link[M+1];
r0 Q! e& t9 m$ D
" K B4 S! O; P9 Kvoid main(). v; D, ~) [8 h2 W! Y" k
{int i,count,h;
# b# }% h0 d/ P8 Y9 @$ m! Y9 nfor(i=1;i<=M;i++)
3 y# C7 z6 o0 u; S) x* |3 L{ if(i==M)* s- \6 e' a% l* v1 M, Z' q
link[i].nextp=1;6 }& m- B0 `3 k
else
, }. I' N8 {# d! s/ b link[i].nextp=i+1;
8 S# J+ r' d4 ^ X/ l7 m link[i].number=i;4 L6 \1 W5 f! v% y0 |" B4 }
}+ U* w2 k& a' G4 p
printf("\n");
7 a- ] d3 T9 Z+ h* E9 ~& {count=0;
3 d7 g/ z& e+ W1 _: w* m7 C6 c5 `+ s* wh=M;/ I; X+ @& \- U# m$ d2 D
printf("依次退出的猴子: \n");0 R0 K3 c: @& B/ _# e# i9 K
while(count<M-1)
. a* |5 n9 T' h& V{i=0;
* T2 I) O7 q0 {( h& I! xwhile(i!=3)
; q9 X+ N, k: o* S5 L{ h=link[h].nextp;1 p7 M5 K8 @! r; Y/ _ k: ~0 R
if(link[h].number)0 ?* m' W& x+ N; [
i++;}) L! X( S! j& Q. O) P
; A. c! Z3 S$ `" E0 Hprintf("%4d",link[h].number);
1 Y2 b: h9 y% q# c& @4 p9 N; Slink[h].number=0;# \* P0 }0 T' p0 J* M9 f
count++;# ^( B1 l! q# B1 @: w7 h
}
: n9 v: b% m8 [: M; p0 w" |% A6 |/ p$ ]
printf("\n大王是:");, I6 `8 H J6 |% o3 \6 m# I
for(i=1;i<=M;i++)
4 M" w! n1 e) Q! I if(link[i].number)4 {) ~, l/ E3 I( Z" l+ V
printf("%3d\n",link[i].number);" l z- `. m Y, I) u+ }
) K/ s$ P6 u: V2 z f0 ?5 V
2 b% s9 A& c. D; Q$ y}
& x# m) U ], U- N0 a7 M第三种是普通方法for循环1 p, M3 L$ ^+ U% {
#include<stdio.h>
" r. _3 Q7 R' a8 ]* {! _, Xvoid main()
$ U5 B# m% T4 i{ int i,k,m,n,num[50],q,*p;( ]' v0 @5 G2 W/ u3 A) {9 r5 P Q
clrscr();/ }! |: E6 h% K0 r
printf("input number of person: n=");* Q/ O7 S' U0 E& E$ x) u) e% i/ F
scanf("%d",&n);2 K% k. T) p3 H% ~& o
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只, m0 o) a- E, o+ X: v- W3 @
scanf("%d",&q);
+ Y" T' z& P1 z5 l p=num;
8 u; a/ j! E* D3 L for(i=0;i<n;i++)2 b- _; G6 q& e; L
*(p+i)=i+1;
8 p1 {3 E6 O5 |& ~8 \, M1 R i=0;8 [% P9 r6 d5 u& @% ~
k=0;
( V3 M6 U( ]" G m=0;, n: b" M0 V7 l, h, K/ ^
while(m<n-1)
, H4 e7 a4 {) \* Z9 l& ` {if(*(p+i)!=0) k++;
; U* c; |$ X# O# m% c# n- g* s if(k==q)( P: ^; W4 M2 R
{ *(p+i)=0;
7 r* P0 \; e1 y# v8 U: _ k=0;" W' P1 [3 H& s; }
m++;( @- V6 ~- q. E/ Z* F
}2 I: v% Z% g9 D1 l
i++;( i# Z& q1 N, \4 }- l' o
if(i==n)i=0;
5 I7 i# n& V( g2 L/ p& Y' r& t }: S( v3 I" _/ ~3 H2 N
while(*p==0)p++;* G" Z2 Z" v8 o1 B
printf("The last one is NO:%d\n",*p);
2 b4 f2 w5 [% b' y" _ getch();
( J2 t3 N. l. D2 s. F: m5 r. ]4 w' Q
} |
|