|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( R7 v/ {* E. S6 _! O$ [
这几天我在忙着编一个问题,我用了一种方法编出来!
- { Y, _4 m" s( Q/ N" W7 p但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. }* T* { p! u+ {: D
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
$ x' ]' ]' O8 S4 [
1 V w, P/ ^4 E. p; a
/ X6 ^5 }1 }# f' ?5 f" L4 P 题目1 O" M9 Y, }% l# e: I, Z
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
) o! L# j/ x3 U& R3 ` K第一种方法:利用循环链表2 @$ ?8 j; f/ Z. |2 z
#include<stdio.h>
6 d: n+ `3 a) _, `" l#include<malloc.h>
% ^% _9 P5 y4 d#define M 8 //共有8只猴子
3 M1 P7 p5 \/ S0 W0 s+ h& Q#define N 3 //数到3只时退出第三只/ Y8 g' H% K4 }4 u7 h6 f5 K/ d
typedef struct monkey9 j, W; a4 M' J, P6 m
{int number;! p% e5 X1 b9 j0 i
int flag;
2 w5 j. _( ?( d, ^* P* W gstruct monkey* next;7 g1 W+ ?7 A( F% i' }5 z8 H
}MONKEY;
. `" R+ d" j: S, U& Q, emain()5 L2 _ g2 X8 q' D
{ MONKEY *head=NULL,*p,*s;) p% m! o1 _; A2 V4 |1 g
int i,sum=0,count=0;+ Q- Q0 ?3 T& f
clrscr(); //清屏
; n9 D0 W3 {- R p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ L7 z; Z& u3 ? E5 B% [- {$ L p->number=1;p->flag=1;4 R! U J2 z+ v# O/ p' o" {1 a8 E
p->next=head;
0 J9 }* r0 O9 ] K+ \/ d8 ? head=p;
$ i7 O2 O: v% I; y0 \ h for(i=2;i<=M;i++)8 `$ q9 @2 h" M2 l
{ s=(MONKEY *)malloc(sizeof(MONKEY));
5 v, ]2 Z2 d2 L* M5 H- _- c s->number=i;s->flag=1;
( {* u4 R/ s4 i/ H- f s->next=head;
- Y7 |7 ~3 P# I; I6 \0 L/ F2 c6 x" \' V p->next=s;p=p->next;5 D1 m8 A% ]+ `5 a4 }7 q1 _
}1 M1 J0 ^& q0 w0 P. Q
p=head;
, }, T. N, w, K0 ^8 f% ~. f for(;;)7 b) a4 }( t, t5 p @
{if(p->flag==1)
/ I, L, d p( j9 g- c count++;1 [! V' V! o; S7 _' \
if(count==N)
2 ?1 [# C8 T$ f" L3 H7 o+ x {p->flag=0;
6 X1 x1 B* ^8 A8 f count=0;
0 x; f( N: ]* u sum++;}2 K c3 A7 e+ Y4 S6 |* O
if(sum==M-1)' I: A0 p$ E1 @ o& T- @5 I
break;
1 A0 T' y& M) i0 l+ P: R p=p->next;
/ E6 ~7 ?- o& K5 W D% k8 F' q }
8 H9 n( J1 T$ c/ d, b% W p=9 w6 R* S! j& v
head;
4 d2 z/ b7 Z& M, c8 J" b( R for(i=1;i<=M;i++)+ w# F* b5 T2 M: p
{ if(p->flag==1)
3 C% n7 T/ h& C% T- o/ _! J printf("\t%d",p->number);) _* d5 I. L8 `6 W! p2 N
p=p->next;* \3 j# U, B7 V3 e& w/ ^/ R
}
3 s3 S( O/ P1 [6 L+ |' ]
- }4 l1 A# Z) E# e l9 R' {/ m9 j3 G! p" I# }" q0 B5 _
( O$ S. ?2 i1 N1 W$ }# J& u' G} $ K& C: l, I% X
第二种方法:数组/ A. G5 e! G+ w, ~- `- b
#include<stdio.h>' d$ V1 w' X8 `8 N! C) L
#define M 8
3 [" ~! ? l; l5 Z& X' Fstruct monkey
+ L9 U* `& G9 N5 o" |8 s{int number;
% C1 @( ~; [3 e8 L7 ~int nextp;
& J5 f* K, ?" Q5 ?}link[M+1];* M* l: `2 Z1 @1 A
% U. M( }# z, ^4 j4 h( {3 ] Q
void main()
2 J$ `9 J C( M* q# f{int i,count,h;
3 P ]% h4 `0 ~: Xfor(i=1;i<=M;i++)2 k1 m; V0 |6 K
{ if(i==M)
- l. p$ U( C; X& e+ l' c link[i].nextp=1;0 C `+ C1 R% |5 @( k* ~/ U7 w) H j' N
else/ a6 _) S3 c+ u
link[i].nextp=i+1;9 F5 \) ^( e0 n- Y- U1 v
link[i].number=i;* p; l! p6 j1 h' `: g. {! o4 l
}
, b7 d% n/ ~' b+ Y' C, fprintf("\n");, \# c3 C" x1 \1 d# _; S
count=0;
/ s3 l8 `7 ^ N' {6 s( A8 }h=M;
, K! l- k) w2 m0 D8 tprintf("依次退出的猴子: \n");
3 H9 n9 x, }! O7 E6 T6 t( bwhile(count<M-1)
1 D4 D, l; D; T8 w* x{i=0;$ b: ^ O( K6 E& o* z
while(i!=3)! |" _) E; [, x/ E' a
{ h=link[h].nextp;6 s! M0 t! M, M% u9 r* e) L
if(link[h].number)9 t! @6 y. r4 D V* j
i++;}% \7 K: `1 O; I
; A6 L$ t- c1 A1 G; R* [
printf("%4d",link[h].number);3 p* Q! |! L- u, h" Y, T
link[h].number=0;
! X0 Q) g8 i' ~/ e0 t" p8 ucount++;
8 F# X6 o' U/ K o; ~/ |& G}
8 V8 W3 `2 }4 g8 d
+ J+ {; y8 z0 `4 \$ q pprintf("\n大王是:");( W$ ^9 f4 U: k
for(i=1;i<=M;i++)8 J0 a) X/ e. z. `4 i: E6 b7 N
if(link[i].number)
. e0 L+ u4 F4 o1 t printf("%3d\n",link[i].number);
, Q+ w0 S1 u3 ~. u5 c% V+ f
3 i2 m; c9 d$ N) U
+ ?6 y1 U+ m3 s8 w/ j( J} + P3 `; o( C* _$ o- Z# J6 ~
第三种是普通方法for循环
# H. P4 N1 _3 [* @: P: j#include<stdio.h>
. Q# m6 G7 Y( V/ Y. b0 @void main()
}2 k4 D/ G7 c6 Q+ t2 l: k3 ~) f{ int i,k,m,n,num[50],q,*p; J) e6 W/ Q# h0 ~2 L$ K0 Q. q
clrscr();6 ]' Q/ g. L- J- ^$ a, h
printf("input number of person: n=");
6 B- V P, j* ~* z scanf("%d",&n);: A% m. n7 R- w. @
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
5 ^1 ~) M5 r! W' T3 Y scanf("%d",&q);) a# j: o; d b0 b) ]
p=num;& F3 b( x- z4 b
for(i=0;i<n;i++)
# T3 y& z! ~& J: U) s *(p+i)=i+1;+ |9 b5 X8 I0 Q5 a6 y
i=0;7 H( U j5 ^& L+ ~; F5 K5 b0 ^( N
k=0;# u# ?: `& h( O9 F2 u4 L( p- l
m=0;$ s+ H* A$ n1 M4 T5 Y) N3 J
while(m<n-1)
. R2 x6 W' s E! P) L3 v {if(*(p+i)!=0) k++;
% G( G# g9 I4 z, e3 m3 p& [ if(k==q)
, c9 Y2 `( V% K# ] { *(p+i)=0;) b4 l8 h. i/ p) E' @: v C4 }* P' ?
k=0;
" Z5 K& c" o5 d8 e8 S$ K% s m++;
: r. g% d& P3 s }/ c- \5 e. b( `. D
i++; W, R6 |$ ^9 o, x' b2 {2 W
if(i==n)i=0;
& C' T3 }# k: f3 v }
4 k* i$ o7 n5 n3 \/ u* H4 p while(*p==0)p++;& r9 P- L' [2 f8 C' I0 Y0 H2 T$ A
printf("The last one is NO:%d\n",*p); p2 q$ c- J! m, c
getch();
5 m7 V$ i, Q4 t, a! M, y+ F% V1 L4 b3 V$ B t5 \: T D
} |
|