数学建模社区-数学中国

标题: 【连载】科普之---随机数的应用(猜数字游戏的实现) [打印本页]

作者: wangzheng3056    时间: 2013-7-30 15:31
标题: 【连载】科普之---随机数的应用(猜数字游戏的实现)
本帖最后由 wangzheng3056 于 2013-7-30 15:09 编辑 & M) L; u; \' @) H# f1 X. J. e

* h5 p' h) j5 c2 b; Z8 ~上一篇:科普之-------随机数rand()的用法
# D. H9 x+ K/ s$ W* E0 O9 [上一贴我讲述了如何生成伪随机数,今天我们将难度升级,讲述随机数的应用---猜数字游戏的实现(大家自行了解游戏规则)。% u0 s( V! e& K" j1 g4 H
程序的流程是:8 ^* N' }! D  o$ b; d. \4 F9 D
1.生成一个四位数要求每一位都不同,放在数组的四个元组中7 c: Z$ B* I& T% T0 L! m& r
2.要求用户输入四位数* \8 `% D% U) p+ f, b! ?8 @# x
3.程序将用户输入的四位数分离,放在数组的四个元组中7 @3 z6 H. M( M
4.将两个数组进行对比,记录对比结果' w% ~" j- t& H! \! r$ B, h
5.输出结果6 O7 ^/ C, U' }
[attach]128096[/attach]
  1. #include<stdio.h>
    . r- w) A% E: @. i* X  _
  2. #include<stdlib.h>% ]2 T% V) h% E+ L' i5 a  h  j1 v
  3. #include<time.h>
    9 v3 p0 B; K' F& R3 j) e+ H
  4. int judge(int *a,int *b)
    ( e' f& S$ D& v$ C( D. e4 r( Q! }
  5. {
    . D8 r/ z1 l! @- m7 L5 V6 j
  6.     int i,j;
    % s7 h. y2 G  `
  7.     int count_A,count_B;) q0 |! ?* N9 p
  8.     count_A = count_B = 0;
    7 y, K4 D7 f$ C2 M( w1 ]
  9.     for(i = 0;i<4 ;i++ )
    * X7 e/ r! W0 ^( x
  10.     {
    ) P2 t8 ]& A& T* D3 @% a
  11.         if(a[i] == b[i])  count_A++;8 R% w! ]- ~& e/ T
  12.     }
    . Z& T7 b7 A$ \8 R4 c/ }

  13. $ D6 j  ^8 m, f
  14.     if(count_A == 4) {printf(\"%dA%dB\\n\",count_A,count_B);return 1;}
    . k6 o) f2 M$ _
  15.     for(i = 0; i < 4;i ++)! a* \0 s0 q$ h: t
  16.     {
    + c: {8 ^# w: O0 S
  17.         for(j = 0;j < 4;j ++)
    8 U/ Y5 ?( @% H  ^% u6 h* e
  18.         {
    & {0 m8 H$ A/ `, v% c0 S8 e  G
  19.              if(a[j] == b[i]) {count_B++;j = 4;}7 c  b2 d  c6 d+ v
  20.          }
    . B: N. ?7 H* Y0 [- \$ P0 }
  21.     }2 m! T2 K4 P! v5 e( n8 W3 o
  22.     printf(\"%dA%dB\\n\",count_A,count_B);" C5 D5 g5 |: _* B  v3 C- O8 Z
  23.     return 0;* D& d+ N2 L( O2 R
  24. }! a/ F1 @' Y: w5 W- z! V
  25. void main()//c语言版猜数字游戏
    7 F, I! p( _5 G$ f. p& ?
  26. {' U5 e2 R# x; r# A2 [
  27.     int r_num[4];. i: n0 D  y6 g; }9 t0 p! L
  28.     int input_num[4];' Y8 f9 j, R6 Q! b) ]4 }; E  y. x
  29.     srand(time(0));* n" Q8 Z, H7 S# E0 `, c
  30.     int j,i = 0,temp1,temp2 = 0;
    * ]# C+ S  l4 w
  31.     /*********************生成四个随机数***********************/
    7 p/ S$ o7 V( V& A; a; D$ w
  32.     while(i<4). y4 z4 A& Y1 f# g7 e( P5 G
  33.     {
    ' T# V- z  t1 y6 Y. B
  34.        if(i == 0) {r_num[i] = rand()%10;i++;}
    - p. _4 N' p. O. I
  35.        else7 s5 ~3 R1 }" [. E" O. P8 b% L
  36.        {( ], g4 n6 M3 e: I' C+ n2 L
  37.            temp1 = rand()%10;
    9 T* c2 }; b: f$ [& q% _$ A
  38.            for(j=0;j<i;j++)
    - {" O, E  I- A7 D6 }3 v
  39.            {
    4 `) ^; s6 A9 ^  ^: b
  40.                if(temp1 == r_num[j]) temp2++;      
    9 Q( }' B5 d* G% q7 U. Q  j
  41.            }' ?! b" s8 r5 ?
  42.            if(temp2 == 0)* [9 i: b' T- s- g' Q/ f& Z
  43.            {+ p3 x! T  {0 T, \$ P3 B+ X
  44.                r_num[i] = temp1;
    & @3 ]' \( _' q+ O
  45.                temp2 = 0;" y" y4 @  Y; H# s0 l4 b9 y. T% K
  46.                i ++;
    ! ?6 {7 e, [. i6 S* j) W4 R- V
  47.            }# Q* n- I' }' P# z! T4 r: j: a, i
  48.            else
    - l# I" E# v& x) ]# S5 e
  49.            {
    % S5 z& z/ v4 a
  50.                temp2 = 0;: e+ c. A" @3 @% X) Y
  51.                continue;  S1 z0 g$ ^2 x9 e& ]
  52.             }. v+ g+ w1 x9 n2 }, p$ _
  53.        }   ) ]; K3 ?# J+ J0 m* d. @( H5 s
  54.     }
    , V; ?5 R1 V/ b7 G$ r3 u: y4 ^
  55.     for(i = 0;i<4;i++)8 \7 \: W% e; R: ~3 }
  56.     printf(\"%d\\n\",r_num[i]);- x) m* `( f( N/ O
  57.     /************************猜数字游戏核心部分*********************/
    ) {( x5 |# z) v) ~8 \
  58.     for(;;)
    , A$ Z5 [- r" p$ i& c$ m: ]
  59.     {
    # t! G% B* _( s$ s: ~
  60.         scanf(\"%d\",&j);
    0 [6 L5 G0 @. s' R& _& p8 k1 Z8 m
  61.         input_num[0] =  j/1000;
    + e: `  j( b  S) C3 {/ J$ _
  62.         input_num[3] =  j%10;
    $ s+ w9 d' Z9 Y' k6 u5 g5 {! z
  63.         input_num[1] = (j - input_num[0]*1000)/100;" Y- n* t- S2 k0 @
  64.         input_num[2] = (j - input_num[0]*1000 - input_num[1]*100)/10;
    . S% j' p; E" [& n+ w* R" u
  65.         /********这个地方缺一个函数判断输入的四个数是否一样,由大家自己实现********/
    6 J7 F" H. y; X0 p9 p' `
  66.         if(judge(input_num,r_num)==1) break;& l9 i3 {6 Q4 m. U0 u1 h
  67.         else
    ( i6 M/ ~' V# \
  68.             continue;  d8 I3 D- @4 V
  69.     }3 _: ~8 R3 B. L: h# N3 r; J1 a8 E
  70. }
复制代码





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5