|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!: a0 I- ]2 }" h
这几天我在忙着编一个问题,我用了一种方法编出来!
% ~# ]3 K4 w. z, S8 G8 }但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!- }# t" c v, G8 Y
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 8 E4 |. ^' v+ u
) I2 V2 l0 O* `/ V i A
' ^- L( @, i6 n' v 题目9 K& ?, G" W4 i) L7 f, a |7 O! Y8 g
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
8 ]0 `' O/ F) ^1 e" c* u5 J6 W9 _$ P第一种方法:利用循环链表# ^- ~4 }6 c h5 u+ g$ M
#include<stdio.h>
9 {. Z! e8 a9 c3 n' w#include<malloc.h>
1 H* ^7 J* Y3 a7 g$ R- z#define M 8 //共有8只猴子
/ A1 r" S& [0 Q5 V6 a# Q) L#define N 3 //数到3只时退出第三只8 H+ q4 ?) H5 F* T* O" R
typedef struct monkey+ z: r0 D# L" m( B" _
{int number;1 V! u# U) S2 b$ z3 N" F- x5 o
int flag;8 ~8 t6 L+ }( ^! k
struct monkey* next;# b3 {% b9 n- j* a+ f# V
}MONKEY;
+ V: `8 H0 e2 V! B$ ~main()
8 E" ?7 y3 m: d$ B2 b{ MONKEY *head=NULL,*p,*s;5 V3 \. P/ M9 a4 N
int i,sum=0,count=0;
, W0 [: V) k8 ^$ w, p# | clrscr(); //清屏8 v V2 s2 h, ?5 A& J; \# r6 m
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存: {9 s* Q A# ^1 `
p->number=1;p->flag=1;. y( J0 T' L1 f" s* Z9 P
p->next=head;" j8 m d& D: v6 o. h
head=p;
5 r2 g# ^, W: G3 i2 O6 @ for(i=2;i<=M;i++)
) H1 C- m' t$ R# R! C" \ { s=(MONKEY *)malloc(sizeof(MONKEY));# u# k) R$ K S* G& F" }; e
s->number=i;s->flag=1;: B1 \$ J% F X0 M6 J! `
s->next=head;- A1 z/ {8 B: B) C& Y
p->next=s;p=p->next;8 O. Z7 v& Z; D4 U) m0 [$ f& J& r# l
}
) }. t3 ?. }! u4 @/ E2 E3 c p=head;
4 [# T' G8 h' W7 L/ P* F. m for(;;), w# N6 X* w3 e' ?' Y. j9 u
{if(p->flag==1)
; ~2 ]: W" A1 d% o1 J8 Z$ F4 C count++;7 p7 m$ E% r( i$ a$ S3 H. u1 b) K
if(count==N) J5 {6 @, S. l# _) f
{p->flag=0;2 H. i, o- t2 { I( ]0 t4 `
count=0;
5 O! ?, O: z7 |3 X& S* v; f sum++;}$ Y; w/ \' Q* l0 C
if(sum==M-1)' [4 ]' s* [/ M3 a
break;
8 r3 | [* [ _' t5 `( F, C p=p->next;3 s$ t+ I/ A, p# M. q
}0 z6 |4 v# x* O4 k; W# r& Z
p=7 ? t1 }& O8 H! F
head;
5 g' h `: _1 i, v C" G for(i=1;i<=M;i++)
4 |' F( g9 z2 l1 O { if(p->flag==1)
# k% J1 Z. ~# L" D1 R: n4 X0 H. n printf("\t%d",p->number);
% u1 C! ]1 j7 Q! O p=p->next;
: b) Q8 r3 P y6 O, B, j }( k3 L4 y& c$ z9 [! d. _$ X! B
7 D# }2 ^3 p8 S( m. s% M
" a2 Z7 p/ F' \! V' m7 [4 b& [) w! y) D6 H! B/ Q( i
} " G' n, e2 {3 y6 _
第二种方法:数组" G e' M, v, Q
#include<stdio.h>8 a i7 v1 d$ B& F0 {8 U
#define M 8' X: m6 D0 \0 X4 F% a
struct monkey
9 s9 m5 q' z2 F! f1 n{int number;- C, i, i1 _4 S/ s. J- O
int nextp;$ v5 r* Q d9 Q8 e6 u% x8 E
}link[M+1];
9 J" U5 m. ` X" s3 ^0 N6 V8 n# k+ h' s( S, f! h) g
void main()8 W+ N& G/ O8 }1 s
{int i,count,h;8 H$ B# Y$ C4 g) A9 U8 P
for(i=1;i<=M;i++)% [5 @5 z. F$ F; }) l* {
{ if(i==M)1 O. W6 A+ ?$ B/ K! O/ u" v
link[i].nextp=1;
* u8 H1 E- a5 I else
& _! O+ A x( m4 r. t link[i].nextp=i+1;
$ [! s* f& G! K, y1 I$ C8 K7 ^ link[i].number=i;
$ E: v( [6 i' `$ U0 {}5 ]. ^5 j- i! _+ J
printf("\n");
- P& X# Z7 ]3 U1 ~! Scount=0;7 T0 ]' r" M9 B+ |
h=M;
7 w- a+ t* Z( _& V; q, B3 ~4 Sprintf("依次退出的猴子: \n");
* m, e. W2 h P! c/ Z/ |$ Zwhile(count<M-1)
' N$ f5 [" `, j( }{i=0;
1 D, R1 D" F0 }/ U$ I9 _- c' G- @( Twhile(i!=3)
9 v4 f/ @2 s# E{ h=link[h].nextp;
. H6 J6 U, O: b- w8 ^; \ if(link[h].number)
1 T T! n6 C$ b" @: v- | i++;}
" H P) W3 ]# i I+ P' b$ h4 O4 S5 F- A+ p2 n! o
printf("%4d",link[h].number);
_( ?) Q) W7 Z( a! x( A; ?6 w* {link[h].number=0;
- K: \" Z" H I: x* Vcount++;! W$ G% k7 X4 i" \1 I
}
3 q# D: t3 U% C; w1 f! t: s2 D9 ]: Y7 K& J! E" z4 E
printf("\n大王是:");
& [' A. d+ i/ I, a5 d8 t& F for(i=1;i<=M;i++)% K( F5 I0 Z" O- }' \( S' J
if(link[i].number)
; m$ L3 R3 V7 e; g8 l printf("%3d\n",link[i].number);% O) W" V# [: b: w/ ]
. X5 Y B7 x9 ~3 ~ t+ V6 W" F, X$ t, j
: K$ b0 n8 U1 H6 _7 {} 7 f+ E3 h) s' l6 u h5 S
第三种是普通方法for循环! P C1 h2 w; V# o: X; e5 R" O7 _
#include<stdio.h># h ?5 |% p5 @; [
void main()/ a0 t3 ^( l4 L6 s3 p. U4 p
{ int i,k,m,n,num[50],q,*p;
1 ?0 [' M* n# A+ w8 W5 }; m clrscr();" {, P+ t, d+ T* I- \$ `/ P
printf("input number of person: n=");4 K6 @. p! V% u
scanf("%d",&n);
/ S: _; \7 `6 ]5 }printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& y' D* P2 q7 G$ J. E: k
scanf("%d",&q);
?9 c( Y2 p/ n" B p=num;5 N) A( c- q+ S' \/ K R
for(i=0;i<n;i++)
. Y! z2 F' X5 L- l *(p+i)=i+1;8 W- U% a! |9 p
i=0;
9 ]/ A) b6 O/ r0 B k=0;; U3 K7 O! K3 k# }( Q
m=0;
+ g" D0 x8 x5 p1 ?# d while(m<n-1)
0 [+ a7 E/ E" p0 t. p4 p {if(*(p+i)!=0) k++;
1 E, k2 q% {' x$ m& Y6 w if(k==q)
$ H8 w! ~! ]- o { *(p+i)=0;
+ }" \$ e! C, ~) I7 m# H k=0;
) h8 G3 Y9 y/ o( \1 G m++;
7 m1 h% r8 u+ \& V& x& P. T }! }3 m/ T* U5 o4 g( v4 v% I
i++;
) x( }& t4 C! @3 _# o if(i==n)i=0;1 v* f: a( `- G- Y+ l4 ^9 k
}2 \. p. y y* S- @, e/ y
while(*p==0)p++;" b3 u f& k, @; w- h
printf("The last one is NO:%d\n",*p); U# k- a& n: `9 M
getch();
' M/ X3 z2 O" Q ]! i' G1 {* F9 j0 W# W: @" E! u/ u
} |
|