|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
; S t( u- I* p: \: e. [! \这几天我在忙着编一个问题,我用了一种方法编出来!$ p9 Y2 N2 A9 v$ D0 N$ Q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
& Z2 r! P2 V3 o( z注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 5 G- R4 z& Z/ F+ ]
- L/ ], D U* w2 B0 G& v u4 D4 ^9 p0 }! @
% G1 i1 Y% @/ \" h 题目1 [5 q" `0 a' V' o% Z- W" b
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
8 }# q$ b0 U) o9 u$ m' u6 I! S第一种方法:利用循环链表
- p" e$ y* Z, M% d8 V) o#include<stdio.h>
5 n$ G! v* W2 { I3 j* G* z! u#include<malloc.h>0 E" U6 Y h! s2 L) r+ P/ k6 C
#define M 8 //共有8只猴子( @, ?0 E$ w' s8 f( |
#define N 3 //数到3只时退出第三只2 ?4 Q0 E k) Q3 M
typedef struct monkey
- M5 K! H' {/ v2 _8 L{int number;
/ s7 x% g( ~8 X/ n a! G6 j9 wint flag;; [. N9 I$ x- R' }
struct monkey* next;0 l: q2 o* Y7 i) c- a# `
}MONKEY;5 w( _/ S# A( G5 ~
main()
. i) ?3 [, @" Z9 t+ u0 X{ MONKEY *head=NULL,*p,*s;7 i8 \$ j: T, I0 F9 K% c
int i,sum=0,count=0;
. J$ m- z1 W% u( [ clrscr(); //清屏$ o$ q3 e" ?+ }6 o" A: l: i+ F4 f9 {
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 M9 z4 U4 Z1 N6 _* Y- e2 J5 K p->number=1;p->flag=1;9 B$ n$ O2 s l4 _/ N
p->next=head;
4 O) m& w% R2 o6 ^: Q0 X head=p;7 W: C* z0 c, L9 n' o. ^( ~" W: n, o
for(i=2;i<=M;i++): ]; c: _5 g' [7 V9 `* a/ t
{ s=(MONKEY *)malloc(sizeof(MONKEY));
6 {- X: y1 v" t. r% Z s->number=i;s->flag=1;
- F1 p1 R+ t3 Q5 e: y9 y( T/ Q1 E; D s->next=head;
# k# I. i; s) F ~! L8 A p->next=s;p=p->next;7 E, d' n1 u, F5 \/ M; \7 H: @! G
}
0 {6 j1 q9 L2 }4 k8 D: ?4 N p=head;
$ C* A0 `" D: f0 p, d for(;;)' `3 v/ K* u+ X9 H. I
{if(p->flag==1): S; M, w! S2 ?4 I
count++;
& z2 |0 @; o& J if(count==N)
) H; x0 H8 G$ B {p->flag=0;
( Y T3 ]+ ~3 }- U8 ^. P1 @ count=0;
9 w( \. k/ t# U. i' n* R# X sum++;}8 k x5 c$ L; `; v# @
if(sum==M-1)/ l& p1 r" }- u* l
break;+ O7 M* J/ s. c6 X. c C' z
p=p->next;' X# w! W; A4 v9 K- o9 k$ X- \
}
0 k/ L1 S' g! T( w$ Y" v( t h p=+ r6 j$ m( M/ F( y* n
head;
7 N8 I8 B9 R2 C& e( u7 T+ s for(i=1;i<=M;i++)% Z* `9 K, ^8 R9 R1 `
{ if(p->flag==1)
5 Y2 @2 J) l9 g printf("\t%d",p->number);
% U" m& `( V* q4 d p=p->next;: G% Q) Y: h- d. `6 _* Z* {7 O2 `
}* ^% M8 N/ @3 x. @7 {! O4 c. \
, N% [ D$ q/ o) w0 Q
# V. J( k2 a/ c+ Z0 P& F/ C
, c s, H3 l- i s9 ]; u
} ) ^: V! D, l" |, O! g% L
第二种方法:数组
' F8 T1 x+ B" F; I#include<stdio.h>1 P& e8 a2 U* ~8 o5 q( b$ T
#define M 87 k2 h9 c- J* Z% P# s# U
struct monkey$ Z H G) S$ Y f, o
{int number;' v/ L8 M, ]4 e5 C4 e
int nextp;
3 Z7 l5 W: C, c* p" d" _4 l$ C1 \}link[M+1];$ i' L7 K, G2 M4 ]6 |! g
7 Q3 @' v4 y/ L X) h
void main(), Q7 t) |2 c$ r* b J
{int i,count,h;( N$ [$ U% s7 \9 [' L% k" {
for(i=1;i<=M;i++)1 G) S7 ^9 D& [3 N
{ if(i==M)
: T, V6 \: Q! Z0 s0 }3 M+ P& k! ^ link[i].nextp=1;
. T1 w) B: S0 _ else0 b0 P+ [2 h: Q2 J
link[i].nextp=i+1;! M8 V' Y( X) M( \8 X
link[i].number=i;
3 l$ C1 O4 p7 E L}' M. S1 i: P% G1 p' e! Y
printf("\n");/ }3 y1 f. g6 g* A3 e' u
count=0;) _8 w9 g! i! [+ q, ]& K
h=M;
9 n2 |1 v+ |6 Vprintf("依次退出的猴子: \n");; _/ M8 n. r; m" i
while(count<M-1)
0 B [" U' o7 ~. M2 g{i=0;* w5 W) Y7 C, x* q
while(i!=3)# b+ v: ~7 l. s" ^* W$ H
{ h=link[h].nextp;/ A `3 j: F# k# c- L' {) w* K% f
if(link[h].number)7 Y/ s4 r+ h! F# |* X; T) D
i++;}( P# g6 \% M9 U7 ~$ w4 _2 M
: u0 M0 C1 \0 Y+ J K
printf("%4d",link[h].number);+ B- ^: \- B) ^/ l
link[h].number=0;" ]+ ]7 ]. _% \9 G! P. ~
count++;
, Y# M( ?* O2 x! {" W}
! G& z6 W5 p. o" \
8 f; Y! H- S# F* h' \' c. j) Tprintf("\n大王是:");
M* }4 k: Q: X8 l; `8 Y- T' ~+ n8 J for(i=1;i<=M;i++)7 V } M/ `' r' Q
if(link[i].number)
! t5 `' o6 _8 F5 q! a( f0 j printf("%3d\n",link[i].number);
0 k/ ?2 C1 ~$ k
4 u! J$ j/ H9 v& p6 U9 E2 N: }" w+ V M" r# T
} 5 w+ C( a( O7 `+ ^' x9 ]& p" j3 v
第三种是普通方法for循环
8 o* g; c3 C: \0 \#include<stdio.h>3 N9 N% b! [2 R# F( t, [; t3 F
void main()
7 t3 R3 s X+ a, c{ int i,k,m,n,num[50],q,*p;
' b% L- H" {. A3 C2 P; P. t( o% Y clrscr();4 s: c8 {5 j, k' H, S4 v" z
printf("input number of person: n=");& l* L) ]$ C" g
scanf("%d",&n);, E) T) M7 y: f2 y- M4 j! _
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ J) G5 T/ b3 |* g scanf("%d",&q);
. a5 [# t3 ]3 c. L9 H5 M! ] p=num;6 R9 W; i3 E8 ~- H. v
for(i=0;i<n;i++)+ m/ ]. I0 ]3 _' U( h
*(p+i)=i+1;# _# Z' a* [. R" I9 |- ]6 e
i=0;
3 S {3 _- m! p. g+ k0 q* ]8 w k=0;7 Y9 ^9 Z( r4 V1 N; V
m=0;3 r8 `6 ^7 s8 n; p5 h
while(m<n-1)
. [: Z' S `: R& q2 U6 q$ `) l {if(*(p+i)!=0) k++;/ w1 ]5 x9 Y f
if(k==q)
: w8 ]$ \1 \$ P2 X { *(p+i)=0;
8 `/ q$ f: t3 K8 J" O5 h k=0;
- I/ K2 A& i. e( H m++;
7 e3 @& w5 s# S" |8 m# M } E0 ?. | _/ R6 o9 S9 B2 r4 A* V
i++;0 @5 V8 Z; p' G
if(i==n)i=0;
2 O$ }1 q5 W8 Y1 x8 F. N3 ?) @$ ^* B }
+ V* S* E# L( \: `3 E, l while(*p==0)p++;% S! K+ m# B* O0 J8 m7 q- q
printf("The last one is NO:%d\n",*p);" e- l; y; ?# F2 k" }
getch();0 Z6 h( X; E$ c+ Q& k+ o" D
3 b6 s% n2 O* [" ~
} |
|