| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1978 人关注过本帖
标题:怎样才能得到不相同的n个随机数?
取消只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
怎样才能得到不相同的n个随机数?
写了一个猜数字的程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "../project2/system.h"
void guess(int n)
{
    int a[20], b[20], i, j, countA, countB,k,flag;
p:srand((unsigned)time(0));
    do
    {
        flag = 0;
        for (i = 1; i < n + 1; i++)
            a[i] = rand() % 10;
        for (i = 1; i < n ; i++)   /*这个for加大括号和不加有什么区别?加了程序就运行不了!*/
        
            for (j = i + 1; j < n + 1; j++)
                if (a[i] == a[j]);        /*这是判断是否有重复数的程序,起不到效果还是有重复的*/
            {

                flag = 1;
                break;
            }
        
    } while (flag == 1);
   
    k = 0;
    printf("请输入%d个(0-9)以内不同的数,中间用空格格开\n", n);
    do
    {
        countA = 0;
        countB = 0;
        for (i = 1; i < n + 1; i++)
        {
            scanf_s("%d", &b[i]);
        }
        k++;
        for (i = 1; i < n + 1; i++)
        {
            if (a[i] ==b[i])
            {
                countA++;
            }
            for (j = 1; j < n + 1; j++)
            {
                if (a[i] == b[j] && i != j)
                    countB++;
            }
        }
        printf("数和位置都相同的有%d个,数相同位置不同的有%d个。\n你猜了总共%d。\n", countA, countB, k);
        for (i = 1; i < n + 1; i++)
        {
            printf("%d ", a[i]);   /*打印出随机数组,有时总有两个数是重复的*/
        }
        if(countA==n)
        {
            if (k == 1)
            {
                printf("\n    你是个超级幸运儿!\n");
            }
            else if (k > 1 && k <= 5)
            {
                printf("\n    你是个天才!\n");
            }
               
            else if (k > 5 && k <= 10)
            {
                printf("\n    你很聪明!\n");
            }
               
            else
            {
                printf("\n    你还须努力!\n");
            }
            goto p;
        }
    } while (1);
}
void main()
{
    int n;
    system("cls");
    gotoxy(15, 6);
    printf("开始猜数字游戏!\n");
    gotoxy(15, 10);
    printf("请输入猜数个数:");
    scanf_s("%d", &n);
    guess(n);
    system("pause");
}
打印出随机数组,有时总有两个数是重复的,
2016-07-05 15:22
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
头文件
#include <windows.h>
void gotoxy(int x, int y) //定位到第y行的第x列
{
    int xx = 0x0b;
    HANDLE hOutput;
    COORD loc;
    loc.X = x;
    loc.Y = y;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput, loc);
    return;
}
2016-07-05 15:26
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
以下是引用grmmylbs在2016-7-5 15:34:00的发言:

do
    {
        flag = 0;
        for (i = 1; i < n + 1; i++)
            a = rand() % 10;
        for (i = 1; i < n; i++)   /*这个for加大括号和不加有什么区别?加了程序就运行不了!*/
        {
            for (j = i + 1; j < n + 1; j++)
            {
                if (a == a[j])        /*多了个分号*/
                {

                    flag = 1;
                    break;
                }
            }
        }
    } while (flag == 1);

正解
2016-07-05 16:29
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 4楼 吹水佬
不懂你的程序是干什么的。
2016-07-05 16:36
快速回复:怎样才能得到不相同的n个随机数?
数据加载中...
 
   



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

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