|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 p) C+ {5 X+ n& `- ]- s# S( h% C
这几天我在忙着编一个问题,我用了一种方法编出来!
( c4 h$ s0 v: n9 m但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
Z* S. |, c8 v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 , V2 T7 j: d6 T2 Z! w, T
, y4 l0 g4 g8 k
# N& O) A, |4 G9 u4 v7 M9 Z; K1 M$ E 题目5 a$ ~5 n7 \0 O3 P0 [1 q( \4 v
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。- z8 A* q3 @! f# M( K8 w4 ?7 d7 O2 @
第一种方法:利用循环链表( a5 R& B6 U/ Q/ g
#include<stdio.h> ^0 Z7 f# a5 e) J+ l
#include<malloc.h>3 e8 U2 {5 Q3 S8 C! E
#define M 8 //共有8只猴子
1 I) q2 H1 Q N {1 H- Z+ a; F#define N 3 //数到3只时退出第三只
4 P* l5 A4 P! qtypedef struct monkey
6 [5 b7 ]' G. D2 x9 n7 e{int number;
) U+ T* v! t9 G3 D. E/ ?8 Yint flag;" r; d, W9 W; d0 g
struct monkey* next;! m. @( _' o: e8 t1 p
}MONKEY;
% \1 J+ D; x7 U9 h- @* vmain()/ G: G+ F6 Y, r5 U7 e. a* m
{ MONKEY *head=NULL,*p,*s;% {8 F ], B f2 ?+ o) J
int i,sum=0,count=0;
/ n$ I1 `) L2 ?) f1 W" ^( c9 { clrscr(); //清屏: o, B, X( |6 L: w# @" t
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存' u( ^* ~) V; I) K+ D9 ~
p->number=1;p->flag=1;
" s. @, c+ I+ m p->next=head;' l# l3 d0 O, \% R% ]2 ^
head=p;# R$ ? P" m4 Y1 w: ?
for(i=2;i<=M;i++): ?# m% s1 t1 {' ]! I
{ s=(MONKEY *)malloc(sizeof(MONKEY));7 L0 _6 H; k) F {
s->number=i;s->flag=1;
; \$ Z. K" P- ] s->next=head;5 e1 i8 A6 d! G! l
p->next=s;p=p->next;
C8 u' p/ i+ S2 e* {, b }
% P; _9 P* D! A8 z p=head;
R% h0 C! F' r n3 u. z. \. k for(;;), ^2 Z) Y5 N' x4 L) X8 R; ?1 O
{if(p->flag==1)8 p; m# m& F; W# ^+ G- v
count++;6 w( }" y+ v7 b4 N& q; q% l, Y$ p
if(count==N): O' }( i q3 p: |% G+ c
{p->flag=0;
* S8 l! i4 q8 b) O. A8 H count=0;
6 g+ f) }" x i sum++;}
, b; ~# y7 X9 X# j3 o" i if(sum==M-1)
1 U8 T% l( F, P( q: Y2 O break;
4 l) H! t/ _) K p=p->next;
) b# [+ ?8 E8 X v' c/ { }" I1 Z7 k L% e3 c3 E8 X9 x' O
p=7 b/ c. o" O2 v& X, k* W( n
head;
- b' K. Q# H5 q, C1 d& y for(i=1;i<=M;i++)
" h5 S/ Q5 A E- s { if(p->flag==1)# r0 z8 C) {+ P
printf("\t%d",p->number);8 F2 v A4 z- W$ ~3 y+ o! e0 s
p=p->next;+ N+ w& m$ b# C* S. o
}2 ?$ g7 W/ ?7 M
; _, o+ U& C1 k r) `. }6 o$ y; s. H4 ^) h9 f1 U$ k
3 G8 s* T# C; Y! q- H2 v} 8 M3 g5 A7 V/ o5 O7 g) Y: p% ?
第二种方法:数组. J# k+ b/ x+ Z- P) }; U
#include<stdio.h>
! K+ X, i9 _/ d7 T: Y3 V! b; B3 F#define M 8
. i6 r3 L! R$ U2 l- ustruct monkey
. `6 {& ^( y& R{int number;) N1 U$ ^9 H# V5 ?3 L
int nextp;
% R5 w, z6 Z4 r) R}link[M+1];9 d8 K6 j: }$ C' A \7 |
, ?" k8 | M$ z. c# ]$ e5 yvoid main()
+ @" V) g$ L p0 x{int i,count,h; k: A# z0 t7 C# Q! g
for(i=1;i<=M;i++)
. R. q4 E7 }1 _$ B9 l{ if(i==M)
u) p3 T7 D. B# D! k link[i].nextp=1;
# y" z& |# ~! U) h" z' q else1 O: P) D# {, C3 U7 v( u3 P% q
link[i].nextp=i+1;
5 r- F# b/ ]5 K1 U' }8 m link[i].number=i;
; Z: `0 q$ _. K3 O}
0 l, u9 B) q& I; [+ ~! Z- Yprintf("\n");% b3 M! `5 j @ I8 {" F
count=0;; w* d" f. _) C3 j. k
h=M;. H, f6 B4 K" N; P# U' O
printf("依次退出的猴子: \n");
( G. g7 P# p( ~; s( jwhile(count<M-1)
4 d" r0 [+ e. {9 f" X0 Z{i=0;
+ {' \6 U% G7 i5 x$ ~! x1 N( d1 Wwhile(i!=3)
1 {2 t% v: ^! G0 V{ h=link[h].nextp;& b9 E p3 j- B$ J# K, R- i
if(link[h].number)
3 \6 ^, E, O! j4 `& I1 U2 A) ~ i++;}& f; t% z' K/ E+ s z1 @
0 j# x! v+ I& C2 Fprintf("%4d",link[h].number);" Z& l: u7 R) d( R* |+ I4 d7 P+ Y
link[h].number=0;5 ~5 v8 c6 j/ n% i( z
count++;
& t' A- d/ z9 B}6 L I# t& k! L: Z! ^% Q) C# f
) ?1 `4 u) ?" d, Aprintf("\n大王是:");- ^$ Y8 z& I2 b$ h
for(i=1;i<=M;i++)* a( d$ ~! j/ B: l2 C; b
if(link[i].number)" k% s' D+ d8 A+ V
printf("%3d\n",link[i].number);* @5 x# F: L9 y7 k% }6 F
9 Q0 g" a6 u7 y! D8 Q# I5 R4 X k5 k
} & D+ N" c- \2 k9 n% A( s# F
第三种是普通方法for循环
6 ]$ [- W# v( i( q* y. _#include<stdio.h>% y2 v5 V% |$ Z
void main()3 C1 F, ] R9 W9 Q( `/ B5 P
{ int i,k,m,n,num[50],q,*p;; _: [0 l) m" G" p9 e `
clrscr();! p/ r' h3 N k; d4 F$ ^
printf("input number of person: n=");
% t- H" Q. o1 f7 v- ^ i scanf("%d",&n);1 [. B8 R$ E; M! k5 o0 i" X1 |1 `
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只 V& X& \9 A1 b* a* `: h# K
scanf("%d",&q);' E9 X8 Q l; y5 U
p=num;. y' \" V# n D. P3 i! C
for(i=0;i<n;i++)
; p9 J" E3 \$ N. @ *(p+i)=i+1;2 q0 {& d# K( u2 h) @
i=0;: H9 I4 C* B+ N0 I( T: }; n/ {
k=0;
, Z% f2 ?0 }0 F0 a% j m=0;
7 ~. |' ^6 R5 I) ~ while(m<n-1)/ L* a/ H7 v* t' S9 v4 w) e
{if(*(p+i)!=0) k++;
! O+ }% {$ \: q if(k==q)( e- T! W4 i \' e% B
{ *(p+i)=0;
- Y3 L% J3 r5 e k=0;
. A6 l! h+ G% j' ^3 q m++;
1 L9 [' M& H7 i' t }
, V6 m6 n, U7 O6 ]. w9 u6 O4 z) q+ \ i++;
+ q4 |) ?) u$ K3 j. C7 B if(i==n)i=0;" {1 R: X& Y* w2 h. k( H4 b
} y1 N3 q1 T* `
while(*p==0)p++;- D6 f9 r$ m( j! {
printf("The last one is NO:%d\n",*p);
* l2 I# ^" `# y getch();1 e: @3 Y7 W- r1 b1 G- O
8 U/ `) f: n1 P9 u7 B} |
|