|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ y! N& O/ M" d; F8 L这几天我在忙着编一个问题,我用了一种方法编出来!
7 ^( X, ^- e- O3 d0 h6 c但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!( ]. z6 Z) A$ C
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
7 B& w9 A7 a3 Y; m, F+ ~; ~9 k0 v& z1 e
4 X8 n* ? N+ [
题目
% w4 ]3 v0 u! Q" g. l山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。7 a/ R, I/ b1 m! k7 s
第一种方法:利用循环链表
3 v9 R; _ G8 M6 @: j8 p) Y" i9 _#include<stdio.h>
! {9 d8 W& `% \& D" n#include<malloc.h>1 Y3 t1 u0 M1 a& V0 I" F
#define M 8 //共有8只猴子9 \. A1 d f" ?
#define N 3 //数到3只时退出第三只' T4 ?2 s0 t) K L
typedef struct monkey7 L2 k2 s* x! h C- q
{int number;) M& N! ?4 ?/ O5 l% z
int flag;4 l, j3 b6 k" V8 P
struct monkey* next;
+ R' `0 q( D X0 y2 k}MONKEY;
' c3 o: q* ]" }# E! h; [main()
: \/ t/ `& U3 K% z' M% G{ MONKEY *head=NULL,*p,*s;
8 i/ m! i/ A* j" }& t$ p' q int i,sum=0,count=0;) \) q9 e/ c# f5 T9 K. o' [
clrscr(); //清屏
0 a$ X: {, o7 G5 z0 r. V p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存' F, H$ E0 ?" v* L
p->number=1;p->flag=1;
4 X* F2 [: u6 O5 G) ^1 n p->next=head;
" o7 R" R" b, n* f, Y o$ ] head=p;
! u& W* X/ N0 \& ?7 @6 { for(i=2;i<=M;i++)
8 W8 T M! J; F: F9 C$ H { s=(MONKEY *)malloc(sizeof(MONKEY));
# S& Z7 M4 p2 y; m0 H* { s->number=i;s->flag=1;& g" t3 m& K) I4 O* @0 q
s->next=head;% ~) \$ @( s7 `1 w. J! C
p->next=s;p=p->next;
, c! U0 D; b5 C2 E# x( R9 P }( u3 H7 i/ N* X
p=head;0 Z+ p- I; X+ h
for(;;)
, i. i) o5 \; ?. q1 G$ N {if(p->flag==1)
+ t. K8 W! d; [. u count++;7 L# `% A6 ?: Q
if(count==N)
9 `' S0 }* H p {p->flag=0;5 q' C" B& p5 p) `
count=0;
t; N" r4 A% |6 I+ F sum++;}
) l k9 d: V8 ~ if(sum==M-1): ]8 o5 w# ^4 g& s5 g; V
break;& G x9 A* f0 a! y" i! S: v+ v2 c
p=p->next;
: |6 s( x" R% D0 G }: n0 e' Z2 }+ a9 p0 L- S G
p=+ X N1 g, N, i9 y, c; [: Q. E
head;
& d6 y- D. b( G: ]- M r, Y1 h for(i=1;i<=M;i++)
5 @; X9 P1 Z0 ?$ E; Q+ a { if(p->flag==1), |* {& r* j2 E6 ^% ^ w
printf("\t%d",p->number);
- J4 v0 o2 i: y4 b p=p->next;
: [3 U4 k9 K7 P+ c9 y% h }
9 Y6 G" d) U+ A0 d4 s0 {; p; n* Q7 {. z1 d3 R9 \& F3 y* k* L
! q0 L: M+ O9 M/ T9 C- ~% c
' M+ K3 V' @' A% x8 ^, F- x} 8 `5 N# g/ U2 d9 p, C
第二种方法:数组
2 C6 Z! [6 ]: Z! [( w- M#include<stdio.h>; S% P5 x; Q" n& e" I, Z
#define M 82 L& q; G, o) K# v: K
struct monkey8 s) Y3 \5 I. ~0 g5 Q1 ]8 G
{int number;
1 }, m7 O6 _5 b% L3 a tint nextp;
: s; ?. N2 r- L# k}link[M+1];
" ?0 \7 A' q3 d v1 X
0 L: A2 A) K3 b" B0 Rvoid main()5 _" F: _( q! H4 v% Q* a
{int i,count,h;
8 e2 ?9 ^, A2 Q; Z& l# {for(i=1;i<=M;i++)
1 T; @7 `8 v; t; J: ^8 e{ if(i==M)9 {; }; R. R6 T! B
link[i].nextp=1;
/ T! x6 I" g+ {, K5 A- Y; i# W, _ else
, C, b4 C; p; {! I* w link[i].nextp=i+1;
5 q4 o- e5 ?/ s, G2 z* m$ s link[i].number=i;
# ]3 z4 m5 N9 k) G2 h, j}1 y6 e" ~1 z1 d
printf("\n");, U7 A# a. T& ]" e! ?
count=0;& F: N3 h% U3 U- N$ a5 m
h=M;
' l6 N) z1 Z* k1 h% f1 Pprintf("依次退出的猴子: \n");$ q& V9 k3 g3 U, x- L# h
while(count<M-1)
* d6 X0 g! f* y: N+ f1 q+ ^2 u{i=0;. T- ?5 D% s) \1 Q2 [% T
while(i!=3)
8 [2 ~8 v7 C2 J$ K) N{ h=link[h].nextp;$ m% X! g; x/ e2 [
if(link[h].number)
* Y' z3 A; ~! j- _ i++;}1 r5 p+ F! T5 f& q/ w. ?/ ~4 R
( B+ v! Z( ]7 f* ^ |3 hprintf("%4d",link[h].number);
, f2 ~- A4 Q2 E) Klink[h].number=0;2 S F6 ~; D1 y+ k ~1 H# X
count++;% t$ q0 d5 s$ r2 `) l
}
$ v2 y8 f3 ~$ F% H. E' m/ J3 K2 P2 X- h2 K
printf("\n大王是:");* r/ t2 @* `8 [1 t6 y2 ]( D. v
for(i=1;i<=M;i++)
8 z* j; |% F& `* e( i if(link[i].number)
A/ o1 n. D+ ~- v3 ` printf("%3d\n",link[i].number);
4 K! b4 x& C! d* C) D, U7 ~) Q
& e9 {) Y' {1 f7 Q4 _
1 K/ y9 d% Y( R; P& e. U} 8 m$ q2 ^+ e0 p4 D% f$ W8 L
第三种是普通方法for循环3 i% Z" Z L4 \0 r" H
#include<stdio.h>, C n; h% K# ^( n' d- @. h; x
void main()* Q* M# y Z* V6 }( q
{ int i,k,m,n,num[50],q,*p;' l( B4 M. M8 |5 j, O3 Q, S4 r; S
clrscr();! d7 @0 [+ ?! o9 k% c3 P
printf("input number of person: n=");
* ]0 A. X7 F' K5 ^/ X6 Q scanf("%d",&n);" `# ~& g. ?$ _% S4 z
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
1 S1 P+ ?3 p6 d( U; d+ n scanf("%d",&q);
8 {4 a0 k# s5 G p=num;, ~2 c4 @" Z; c0 N; [; Y
for(i=0;i<n;i++)
6 @* u) q/ w( d9 j2 @ *(p+i)=i+1;
- E, N$ s0 A7 o% \ i=0;
- ~+ z4 }, j. m7 R' X a k=0;8 L- H% \; b) L
m=0;
1 x0 O1 |8 m# v, i1 r while(m<n-1)
* i2 G' w+ S0 h {if(*(p+i)!=0) k++;
# y7 ^5 V; V; M1 F; @3 E! D if(k==q)
5 {7 k$ @% k* y3 L { *(p+i)=0;
6 T1 u. i9 ?% | k=0;- I7 [3 F- U& w- N% B6 x
m++;
# N2 d; O0 G+ f }
D! p" n f$ r0 h. T. K i++;4 p: v% q( y; z# b' L$ V- I
if(i==n)i=0;3 |# ]& e1 o# A V F% {7 R6 W
}4 ~: V6 t H1 W8 _& q
while(*p==0)p++;/ X3 c" j. k+ n/ J! H+ k
printf("The last one is NO:%d\n",*p);
" {. h- b$ B3 O1 j5 ` getch();
! ]3 [. l# H, t2 i! a; i2 Y
5 s2 S. y) {5 r" Y' L: @( @+ t( d: k( Q} |
|