| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2522 人关注过本帖
标题:关于随机数
只看楼主 加入收藏
budong12345
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-6-7
收藏
得分:0 
回复 9楼 wmf2014
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-12 17:34
budong12345
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-6-7
收藏
得分:0 
回复 9楼 wmf2014
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-12 17:38
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
贴图不易,看图更难。
2016-06-12 21:33
budong12345
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-6-7
收藏
得分:0 
回复 13楼 吹水佬
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void main()
{
    int i,t,a[10]={0};
    int m,counts=0;
   
   srand(time(0));
    for(i=0;i<10;i++)a[i]=0;
    for(t=0;t<9876;)
    {
       i=rand()%10;
       if(!a[i])
       {
           t=t*10+i;
       a[i]++;
       }
    }
   
    printf("game beginning\n");
    printf("input five different numbers you guessed\n");
    for(; ;)
    {
        scanf("%d",&m);
        counts++;
        if(m>t)
          printf("Too high!\n");
        else if(m<t)
           printf("Too low!\n");
        else
         {
             printf("right!  your score is %d\n",(100-counts+1));
             printf("you guessed %d times\n",counts);
        
        printf("right value is %d\n",t);
         }
    }
}
                                
                                
        
   
2016-06-12 22:08
budong12345
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-6-7
收藏
得分:0 
回复 13楼 吹水佬
2016-06-12 22:09
budong12345
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-6-7
收藏
得分:0 
回复 14楼 budong12345
电脑上运行时,五位数中会有重复的数字
2016-06-12 22:23
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
运行正常,可以先打印出来验证,判断正确后应加句break退出for循环。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    int i,t,a[10]={0};
    int m,counts=0;

    srand(time(0));
    for(i=0;i<10;i++)a[i]=0;
    for(t=0;t<9876;)
    {
        i=rand()%10;
        if(!a[i])  //这句可改成if(a[i]==0)
        {
            t=t*10+i;
            a[i]++;
        }
    }

    printf("%d game beginning\n",t);
    printf("input five different numbers you guessed\n");
    for(; ;)
    {
        scanf("%d",&m);
        counts++;
        if(m>t)
            printf("Too high!\n");
        else if(m<t)
            printf("Too low!\n");
        else
        {
            printf("right!  your score is %d\n",(100-counts+1));
            printf("you guessed %d times\n",counts);
            printf("right value is %d\n",t);
            break;  //判断正确需要退出死循环
        }
    }
}

能编个毛线衣吗?
2016-06-12 23:09
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用wmf2014在2016-6-11 08:07:25的发言:

这样做是不是比较笨?既占空间,也谈不上效率高。

如果只求一组5个不重复数字,当然无需这样花费。原理都一样,将可取数列设为10个数字就是了。
如果要同时获取一大批这类数字组合,并且每组也不重复,可以参考一下这种方法,虽然这种方法还是有局限性,但比较可靠高效。
如果通过判断去防止重复问题,因为是随机行为,理论上可能会导致执行失败或要设定有限的判断次数。

不清楚楼主的具体需求。

[此贴子已经被作者于2016-6-13 08:52编辑过]

2016-06-13 08:51
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:4 
我的方案是将 0-9 10个数字洗牌,然后取前5位,如果先取出0,就再取一个数。



[fly]存在即是合理[/fly]
2016-06-13 09:03
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用azzbcc在2016-6-13 09:03:48的发言:

我的方案是将 0-9 10个数字洗牌,然后取前5位,如果先取出0,就再取一个数。

如果不是取数值,前导0有效。
2016-06-13 09:33
快速回复:关于随机数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.192424 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved