|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!3 S) v/ ~) j$ X: m
这几天我在忙着编一个问题,我用了一种方法编出来!
' d0 E9 b" Z* {/ J; r但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
9 d3 g9 T' x5 a2 G* l* n) @! P& Q1 C+ m注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 L/ ]2 |1 ]6 ]4 K' X8 @2 B! W$ [2 V' t. w( J
) u( e+ u7 V( A3 g2 P5 o2 g9 h" I
题目4 Y+ c$ ^; g E: ]" z
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
' u( c! X M" h# n0 A5 ]' d第一种方法:利用循环链表
s3 q+ Q, _4 ?) A {8 C, H1 L0 b#include<stdio.h>" R8 p' t+ Y9 F5 u% P
#include<malloc.h>/ {8 z. }9 x$ G$ o; s7 M6 e" h* n
#define M 8 //共有8只猴子& o5 C i! Z! e9 G# z
#define N 3 //数到3只时退出第三只
' t* l) F, a& _2 t) n0 v6 qtypedef struct monkey
2 B! @6 M+ F0 i" I{int number;7 Y4 d0 O# t$ ~' N |' ~, D
int flag;
* z$ l1 X+ v( }* V+ Astruct monkey* next;" m% ]9 X' H" W5 t( b
}MONKEY;
0 ]' q- G _. X: Rmain()' z1 ]. P v, W# z
{ MONKEY *head=NULL,*p,*s;
$ g h1 @( j1 G% @! G6 s int i,sum=0,count=0;4 K# Q, E1 Q7 I* z
clrscr(); //清屏, s- m! Z' u- R
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存/ H/ |- k- \' q% V* l# L' _
p->number=1;p->flag=1;
, _% ~% V+ a6 u; v7 y" u: s p->next=head;: H) |1 p; n! l- @- o' u5 d
head=p;
+ j& A5 B- T. W! r; v, Y( h" Y for(i=2;i<=M;i++)8 k6 ~: {* N5 V
{ s=(MONKEY *)malloc(sizeof(MONKEY));- @2 f0 ]0 T( `5 ]! M2 {( S9 H
s->number=i;s->flag=1;
# n9 H' M7 `0 `* N: C. Y# ] s->next=head;* S0 J+ Z! P+ [
p->next=s;p=p->next;
( B; ~$ ]- H% { }
! L( N$ b ^# L3 P p=head;
Y; Z8 w% `" ?) s) s8 ` for(;;)
$ \9 ~3 w1 [0 ?6 t, n- E$ I9 S2 B0 \ {if(p->flag==1)
8 s% W1 }5 T1 Z3 q count++;# B* N6 L$ o# b) J# W
if(count==N)+ i- c' `4 {' j. s. B# f
{p->flag=0;
$ P" r) W* X% k. U8 x count=0;
0 d% D8 Y/ ~: L sum++;}8 t$ X/ v, X- M* J
if(sum==M-1)' t" C( E& q% p
break;/ E, R8 B# S+ j* W
p=p->next;- H4 @) O5 u" R h
}8 E) z% C4 j# L" C; y
p=
2 t1 d6 m0 D, p head;4 s; f) J# @ m0 C c
for(i=1;i<=M;i++)
4 }0 Z* C& x/ h" c { if(p->flag==1)
% Z' d6 K9 z( V. E) d8 O3 _ n printf("\t%d",p->number);
8 H! O1 }' \( v7 H' ]- N% M# {) E9 F p=p->next;; ~2 T: `9 z+ ]$ q* ~0 C# H2 ^
}
. B1 y. M1 |% ^- T
; v @) ?. d s' n' s0 P2 d( s! Y# T4 }' t
# L6 |/ S" C. o}
% p( S4 P/ W+ w7 @' v, p$ s第二种方法:数组# s6 s/ g! y% u* y. }! T; }, o' T
#include<stdio.h>9 ^- i9 r/ B3 c0 ?
#define M 86 S4 G3 c- {' O4 B" V
struct monkey
2 n! H4 _( S8 T$ O% ~{int number;- Y9 }2 N! x+ o- @. l7 |2 d# l
int nextp;
: o! M/ ^7 p! H1 p, S}link[M+1];
' T2 ]* K0 y; Z$ r8 c* w3 b% \4 F v6 Q2 m. j
void main()5 [- X7 b# o2 ]4 F! g/ H1 H
{int i,count,h;
1 ^% v3 Z4 B$ w; M2 M! D4 G( Dfor(i=1;i<=M;i++)
/ t( E6 x9 E V; s- g{ if(i==M)
P" Q) I# L# M( W2 f link[i].nextp=1;
5 q- H8 C2 S$ z7 H( K/ Q: t else
! ^3 J& ]0 L* Z* A link[i].nextp=i+1;
; Y' r3 B. {) c# o% ~9 G link[i].number=i;
! O3 d7 N, y' c* a4 e}& [3 ]; R5 N" M+ D2 Q0 o: E& }
printf("\n");' I. X$ l3 h3 d
count=0;
9 W3 y' {8 G6 p" a0 ?3 T Vh=M;
2 i4 A! ^( M" E+ Hprintf("依次退出的猴子: \n");
+ a0 ?* f; a8 x t: {& d% kwhile(count<M-1)& n" @" Y4 M* l. i% @: p
{i=0;, ^- ^1 m+ r; o
while(i!=3)
% w- N8 r0 t. V0 h, `/ Q2 B# p{ h=link[h].nextp;0 x" T1 ]3 W7 _7 _1 m8 c
if(link[h].number)2 b+ X9 B4 g4 u8 G! D! Y( u5 Q
i++;}1 @* u* C$ }4 c& d* }( f
* n X& j- A$ |2 B6 wprintf("%4d",link[h].number);
# @9 u: Y7 a8 Blink[h].number=0;
4 D: `7 Z& h! _5 Ecount++;# I7 b# j; e* B& \
}
1 x+ T E, H6 g& T9 f5 X$ ^% o
. H4 I, f# F% x3 r* p" Q+ Tprintf("\n大王是:");
: H' y3 s4 G# ]: C3 d for(i=1;i<=M;i++)
) z( i- E/ B* t O: W/ A/ z if(link[i].number)) C* O) ^6 B5 Y7 M
printf("%3d\n",link[i].number);: O9 D k5 l0 s
+ Y/ f. Y* u) n
# J& ]1 d* X: A* ]' z% x/ @% z s, N}
9 c6 r( [3 h/ r: ^第三种是普通方法for循环7 `7 q2 \) R8 W! }
#include<stdio.h>4 _- R; u1 i( |% ^
void main()
/ m2 X; }% W9 U* [{ int i,k,m,n,num[50],q,*p;
% b6 H9 {1 z5 q# s, s8 u clrscr();+ d! ^& h6 } Z* c4 |* N1 @
printf("input number of person: n=");
- A) w3 m* f A# t& _ scanf("%d",&n);
: {! X; D; @& ~0 i# Iprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只1 f0 C d# M, w+ I
scanf("%d",&q);7 `; \2 n1 s6 `
p=num;+ v7 _6 C. B/ b- U/ s; F
for(i=0;i<n;i++)
( h# U9 w' l4 j *(p+i)=i+1;
5 w- G. w5 w% M( C i=0;
9 M" j$ @0 c2 d' ]/ `+ R k=0;
4 o* d* e/ j# ~ m=0;
7 |: N* B; W9 @" @ while(m<n-1), g2 R' r9 g" l" J7 U$ {
{if(*(p+i)!=0) k++;
% N, V% H$ n+ N" } if(k==q)0 ~" b+ t1 B# Z0 L
{ *(p+i)=0;* _: h7 `) _7 q7 t
k=0;
- L5 Y; r( G2 u( A0 _7 Y! Y m++;9 Y0 C3 C, a. s3 s* e" {% w
}
+ t) E' h0 R7 P) I1 f' }% o: [$ S i++;
1 e5 A3 B1 _9 D2 ^( i if(i==n)i=0;# L; g/ p; T g- E' O0 w u
}4 Q! B3 w; w; H" E, }% ]( D
while(*p==0)p++;$ K- t/ v7 b3 ^# y8 Y+ n+ x# }
printf("The last one is NO:%d\n",*p);
# `7 V5 @5 I* O1 q2 m0 |; j getch();. F( ?/ s$ f' G4 h, b
; }. {/ l2 y) e
} |
|