|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
0 q5 Z, K% L$ l, C( ^% H( F这几天我在忙着编一个问题,我用了一种方法编出来!' ~; ^4 ^& s T3 }+ ^3 r
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!4 o) _3 g& g, x( M4 B; ?
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 - U; h3 t$ E/ r% W
7 m" r" [) }* S, s5 `* H2 i
* n1 {( C$ _5 M9 O! s! A/ J7 D+ E 题目, g3 e( F0 E! Z* y/ h9 p4 G
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。2 \. }( T4 N4 O7 B$ d
第一种方法:利用循环链表* a1 L( j! N% P
#include<stdio.h>
, A1 U1 Q7 c; S `$ P#include<malloc.h>* F: [4 L8 `; G* x! k: }4 @6 v
#define M 8 //共有8只猴子" v6 Z6 v5 e3 y ?0 b: p' x) K
#define N 3 //数到3只时退出第三只& M% _) h, f- k5 K; f4 E5 z
typedef struct monkey
8 ^& [0 Z) R. T2 I* F{int number;
6 p! E7 K8 [* ^( q/ S; {int flag;
! J* l* T6 Q9 b, ?6 `6 X# s, |struct monkey* next;) Q, h. z/ L O% Y
}MONKEY;1 m. {# F1 j1 S7 a$ H1 A: f' {- i
main()- o# r( Z6 L* H# s. V% A7 }& ^! |
{ MONKEY *head=NULL,*p,*s;; q# b' Z m/ c- X" V* o6 |9 f* \
int i,sum=0,count=0;4 @9 o& O# F. i
clrscr(); //清屏
Q1 I8 S+ i# q. h: P9 k0 Y p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ O" |/ E: m. o6 e r9 | p->number=1;p->flag=1;
p' D3 L. ~6 r- \8 c p->next=head;$ m$ |+ }+ G- k, V
head=p;
$ O7 W3 I ^1 p2 U; S for(i=2;i<=M;i++); H9 i& A6 Z+ H# M
{ s=(MONKEY *)malloc(sizeof(MONKEY));
7 T+ j- r G9 u5 e; k; P) _ s->number=i;s->flag=1;
9 t/ I( d# H- {; K! W s->next=head;
6 b6 \; z- w& z. y p->next=s;p=p->next;
5 S% t E6 m w$ @$ x: _% ^/ p }
; X3 ~ x# G6 c3 B: V1 W* h3 b' t p=head;
9 U7 O3 Z4 d, O$ u for(;;)4 w6 v( C2 a+ Z2 u$ Y% C4 Z
{if(p->flag==1)
: z1 R7 _% R8 | count++;
' W6 i8 u/ k) l% J0 Y& Q if(count==N)0 M" Z$ O H# T: q" P, l+ t
{p->flag=0;0 X \6 u4 O& C# E7 w2 H
count=0;
1 w1 M/ M) f. i! C sum++;}* B" b: I6 ^ ?
if(sum==M-1)
: P4 `7 I' T$ N/ \6 [ break;" b" ^1 L; Q# x" t4 g' f
p=p->next;+ T9 b5 f7 W/ f, F1 X! W' ]
}
O* l4 D3 R- d3 x# A2 U: O p=
3 _0 @9 A! t$ W- b1 B head;
; |6 @3 K, K6 \ J for(i=1;i<=M;i++)& r2 h" F& l0 c2 f
{ if(p->flag==1)
* _3 Q! P2 c3 }+ V4 t printf("\t%d",p->number);8 f9 h* A3 n- i$ A
p=p->next;
$ m/ j7 ~3 |' J6 r! x }/ c1 Y% _4 B0 g; D
# r- P0 }" g: n7 a+ l
. e+ s7 C1 j" U M! C, p
5 h8 j! S x: t0 O5 q- R, ^# _
} 9 o; G% a3 B& f$ t
第二种方法:数组
0 E# O" Z' l' H" H' j _. ?#include<stdio.h>4 ~+ B% o- _ V4 E6 [+ l
#define M 82 P9 V( c' e8 J1 @4 r
struct monkey/ T& G7 w+ r! E
{int number;
n# V# r4 d5 t5 T- Kint nextp;5 e( q6 c; Z1 @7 \
}link[M+1];
' j# W( l5 p% q0 q) s1 ]; B; `6 W! D. L1 [* v \
void main()
+ C# ^) D/ k9 S, s{int i,count,h;
, B4 S: f1 y+ G8 P8 }: Ofor(i=1;i<=M;i++); a8 ~: P# s9 ~
{ if(i==M)
+ e* F Q/ r D link[i].nextp=1;
0 _# \" @" r6 o4 y1 P' ]$ C else5 \+ G+ ^, c% A
link[i].nextp=i+1;
0 L6 @8 p2 u$ _+ `, B1 X7 s link[i].number=i;
" [& _) _, U: h9 T4 \9 B} {. S1 l: e7 M" s. m
printf("\n");
3 j" g U& l% J) ~count=0;
# ^; S: J% `& Q3 ^6 Oh=M; y$ ^7 m3 t l5 d o+ o# {
printf("依次退出的猴子: \n");
- v1 Z; H5 I( F" w9 kwhile(count<M-1)
. L& t% }+ S3 i( m2 [/ N{i=0;1 ~! F% F. D" F+ ~
while(i!=3)
' `& l5 {0 ^ P" \. R$ B0 H9 }6 d{ h=link[h].nextp;/ F+ F2 K8 Q6 W- K% Z8 e1 `
if(link[h].number)3 U: F' ~5 e8 Y# q; r9 x( W
i++;}- A2 Q) R' P: E7 _+ z0 v: D$ U, F
8 I: g, {: _6 a3 u- a0 d& }printf("%4d",link[h].number);
n& l5 \7 z9 i" l- \link[h].number=0;
2 q k' e2 P4 g8 icount++;7 f, C( u" f, B$ T( w( B5 g
}
8 [' U, m$ O8 J! g6 O' D) |! B3 w$ Q7 {5 A1 D1 A: U! Y7 f
printf("\n大王是:");9 |4 e) T6 Y6 k3 L8 |4 x# J
for(i=1;i<=M;i++)3 e# Q# F- _! [8 K
if(link[i].number)
/ s! Z6 Y% `% @6 E9 N5 p) a printf("%3d\n",link[i].number);- o j2 _6 B" h1 L3 P8 l% O& U: F
; a; ?" a' U6 K/ A6 T* A
! b/ i3 p; Q* [4 u) H5 L} " H( Q! m+ h' o8 L; W3 e% l0 Z; \( M
第三种是普通方法for循环
. L/ S/ F" b% C2 `8 o7 j8 X+ d#include<stdio.h>
1 P0 ^" h% T/ A8 Y, D. y3 dvoid main(): r8 Z" o7 g0 g2 y
{ int i,k,m,n,num[50],q,*p;
5 `0 x) G. N' U5 L3 l: o clrscr();
. m O5 O7 h+ i( \6 e" }* ]8 \ printf("input number of person: n=");
: Y8 H1 L3 R3 X! I o q# Y scanf("%d",&n);7 m$ x W' H8 p/ g) P- i. \
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只* B) y) D2 m; z. k: X7 p
scanf("%d",&q);
- F7 T, z- k4 }% M( j: X J& _& |/ h p=num;6 D0 E) }4 I8 a& q/ ]) W d5 p
for(i=0;i<n;i++)
( o/ Z4 b! b9 B7 c8 U, D7 l4 [ *(p+i)=i+1;5 A' i0 G% S5 H2 S9 k% A
i=0;
3 U7 B6 E, w! l* |0 b k=0;
& g4 h/ A7 `+ q m=0;! Z0 u, p; j* a/ Z# G9 J- e
while(m<n-1): [: n) h% d7 b ?) u3 @$ N6 d
{if(*(p+i)!=0) k++;
% n" h1 P {0 n% Y3 a% ] if(k==q)! D; `/ _! g+ |$ J. Q, r4 J. K
{ *(p+i)=0;8 J; s# y3 c+ J; z1 m9 Q
k=0;3 {7 }8 J6 T0 J/ ?
m++;' l* M+ ]+ D' J' ~
}/ `* P5 c! N7 M; `
i++;
, Z6 h/ ~' w3 p5 m if(i==n)i=0;
6 h, h. S# |$ P3 C9 I9 {! ]# c$ N( A }
& Q" ^' D' C+ D$ D# a while(*p==0)p++;& d# W3 i4 |5 e! ^/ x
printf("The last one is NO:%d\n",*p);$ \8 O% H& f: E
getch();$ T/ {% W) e6 A$ D) ^
/ A0 P* E+ g {% T
} |
|