|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!; K: k# C) m' P+ _5 R
这几天我在忙着编一个问题,我用了一种方法编出来!. s& V6 [+ y4 i+ F
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
0 C* _8 g5 T4 e4 T1 J6 g注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
& R- O: r+ f1 k8 t/ |) C" M/ ]! O* X K
7 Q; h2 R: |# i: o& R/ j0 Y# h& t) c 题目
% e7 a4 C2 e& ]0 r( B/ d, v山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。 Y$ `: q6 L P' x
第一种方法:利用循环链表
1 F3 g# W& ~0 ]1 y#include<stdio.h>) `4 L! ^! ~, M8 K+ N9 p: b
#include<malloc.h>$ g' d' c( K' B8 @2 t; K
#define M 8 //共有8只猴子1 t8 f) U' B/ m" \9 g. R
#define N 3 //数到3只时退出第三只- V, A* q' C2 |
typedef struct monkey( b) [. r0 p8 X' \) X+ U& T
{int number;
1 }' w0 r5 t7 a+ z& m3 Lint flag;( J& k! Z0 }7 }- s6 ]8 p& ~
struct monkey* next;- t) f1 ^; i+ f% ]1 G7 U- d
}MONKEY;
7 w( n3 Z/ V$ y/ Bmain()
, @$ z @8 y' d7 c% q$ N6 e' x{ MONKEY *head=NULL,*p,*s;
0 z: q) E! f! T3 z5 i int i,sum=0,count=0;
$ `4 U6 l7 a5 C) H" D clrscr(); //清屏
* S9 B. d7 c; k5 r2 B p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) U* D' C: c& r) e7 Y+ ~/ i p->number=1;p->flag=1;4 W/ o" \- F* Y' D% C7 d
p->next=head;
m! K. G C* N9 M1 q$ n head=p;1 y8 K6 x4 J3 \7 q7 H
for(i=2;i<=M;i++)- g4 p' f+ {* [# q3 l+ k# j, `
{ s=(MONKEY *)malloc(sizeof(MONKEY));" T. m" d3 f5 ~# \
s->number=i;s->flag=1;
9 ?& [9 M, [+ X s->next=head;
# {0 `" _' X7 v/ Z9 _6 j8 ^6 d6 L p->next=s;p=p->next; l# R- z [/ V% F+ m% m8 Q" x
}
) O5 }. [/ u% _% j0 ]- l3 k) v) i p=head;
( Z7 e/ G+ I3 \. U3 a9 n+ E2 u for(;;)* D" X0 s$ R0 ]
{if(p->flag==1)
; m' {3 H+ Y8 a- f count++;
8 |9 e8 p P6 f7 z; g I8 W if(count==N)
6 r/ v2 w- }6 j+ ?5 K {p->flag=0;
# k# n7 S4 l3 u) q% P8 K J1 k% ]2 o count=0;
7 I# a& I0 d6 a4 @ sum++;}( M: q$ \" N- ?8 i/ p
if(sum==M-1)
6 ]! ~6 @+ [/ C break;( h7 \; B2 o/ q9 U( j7 F
p=p->next;, \& k# Q. U1 V9 R
}8 T0 c! v! _/ s& \( x/ J4 q8 f
p=
( ]+ `. v; {* v) x6 A% e- T head;4 T# t* S* B- L9 A5 Y
for(i=1;i<=M;i++)
$ |5 Y! f2 M" k$ m* i) m8 L% \! E9 ^* P { if(p->flag==1)7 b3 H, ^5 T1 X5 K6 ]' d
printf("\t%d",p->number);7 B: x, a- x2 g, n/ z* H
p=p->next;2 l- R- _/ `, P s. y
}, \* W; T+ c9 H, S9 Q ^" i7 t/ J. `
1 g- K' h5 q6 H. g X
" g/ M$ P. M7 l9 l8 E
6 z: R! x+ d! N/ S* D9 H5 |0 H
}
8 V* E6 w4 h V8 t: ?第二种方法:数组3 L$ R$ o& Q; w) d" b
#include<stdio.h>
* h! s" x* M) l: I#define M 8) B/ \- C8 Y& A- M8 J# |0 h
struct monkey
; K% L" z8 ^, B7 E D) M{int number;
' d2 ` n1 w' _int nextp;
0 t$ x" M/ d) C7 z% F$ K}link[M+1];+ W2 o% i# s& R. o8 {1 o' R
6 }3 i/ U3 u8 d' x1 W# J# G; a. |1 C; Evoid main()1 S8 ?2 N7 [) @( D. M3 @% G3 _- C
{int i,count,h;- `, Z/ h' ~) a; y
for(i=1;i<=M;i++)
6 e" W% H: ~3 Z- z* z6 ?* N8 M{ if(i==M)5 W$ G! ?9 D& f" b5 J
link[i].nextp=1;+ r% A$ _+ \3 t5 C9 d6 V* S \
else6 ^2 o/ ?$ l& g" L1 |9 R
link[i].nextp=i+1;# w: g* B/ |5 y/ `
link[i].number=i;% n2 u* G7 W5 Q# [) g8 `; n
}$ B& c5 Y) k) x- U% |$ M
printf("\n");6 y* `$ i s5 Z
count=0;
/ i; S B' T* h3 ~h=M;
! b/ _6 T5 w3 O! _4 Q- l! c# yprintf("依次退出的猴子: \n");
6 B7 ^' v( l2 ^- d7 j f6 Dwhile(count<M-1)6 m7 ], ]- P* |- u4 `+ H" P' H
{i=0;
* n0 Q4 b, {( y6 L/ V& `' Jwhile(i!=3)
" k. j: I& }) I: d, C{ h=link[h].nextp;
/ P7 B8 W" \, t; ?/ j if(link[h].number)
$ e* P/ Z$ r! j2 B1 `: ] i++;}
1 q% b- r5 Z5 C p( _" s
/ }+ B8 |2 X$ s" yprintf("%4d",link[h].number);& G- s- V6 @: E) E0 e0 C( l
link[h].number=0;3 t( ?" A. p b- I f7 u
count++;
' S* M6 i' X' m! R1 E3 ^}0 ^- K, }% k2 M3 U( z; w' ?
; u9 l0 q. d U4 M3 Oprintf("\n大王是:");
8 V0 I0 h% u4 q6 I# v for(i=1;i<=M;i++)
9 l. q& e) L( p: F. s* c& Q# [ if(link[i].number)
* {5 R& V G+ }# ^" H5 Q& S printf("%3d\n",link[i].number);
E% G9 r8 a7 \5 ~0 |1 ~, |
# j1 W( ^2 ?; U. _3 Y, f |) W4 |2 M5 g7 L
} 5 F( c U8 H9 }' V% ^
第三种是普通方法for循环
% t+ j1 W1 t2 V% I#include<stdio.h>3 T# u# Z/ W5 O. ]! `
void main()
8 \. @( ~ b8 g2 t2 r X9 n, B1 g0 m{ int i,k,m,n,num[50],q,*p;
* w4 ]& k& `$ H& E+ A clrscr();% T+ @3 R" L$ ~4 D( `- H$ r
printf("input number of person: n=");2 Y0 R) Y3 W' _: `. k- X
scanf("%d",&n);6 @* X' ~" g6 J) [3 A" Q4 {
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
6 }# m+ W1 I6 U s) J4 {& C scanf("%d",&q);- K% W6 T' o4 J9 }' Q) r: D0 @
p=num;
* T- O/ l$ @! M; Z+ M# r" n# ?: @- A for(i=0;i<n;i++)
+ N f" w, k7 {. M( E$ [ *(p+i)=i+1;! ~$ r: C$ \0 V5 z& P9 v; }3 J
i=0;2 Z! D& Z+ T6 R. r2 b* i( A
k=0;
& \2 z) ^7 t( B m=0;
1 u& `% `! c4 ]1 v& p6 O while(m<n-1)
+ a: n' g: Q) z8 \0 b' [ {if(*(p+i)!=0) k++;! ?9 b+ h! g6 q8 o$ [7 f; j
if(k==q)
- O. m9 H( j( f" F( E { *(p+i)=0;
- S7 \ x) b, F) s k=0;( g9 V7 \( Q; y! a1 T
m++;
7 l2 p# c4 C) [* {* L; k+ Q1 R }
; f% }% J% p% b1 Q9 F* o, a9 I. s i++;! B4 |( u$ q) J1 ~. s1 o
if(i==n)i=0;
5 _! L" k. R/ d" Y: | }
: |4 M2 t) e# W2 u) ^" o2 P while(*p==0)p++;
$ t! i! E8 N3 ~) x printf("The last one is NO:%d\n",*p);" I( m3 }. @5 h4 y; O/ z3 I
getch();+ v) }2 X g9 _: A
! G/ s' V* N" I8 f r: z* R: b
} |
|