| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2138 人关注过本帖
标题:如何使用随机数生成一组互不相等的数
取消只看楼主 加入收藏
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
结帖率:0
收藏
 问题点数:0 回复次数:5 
如何使用随机数生成一组互不相等的数
尝试了很久都没成功,以下是我现在编的,也不知道哪里错了
int main(void){
    int i, j, k, l, m, a[4][4], b[8] = {0};
srand(time(NULL));
for (k = 0; k < 8; k++){
        
        b[k] = rand() % 9 + 1;
        printf("%1d ", b[k]);
        int jihao = 1;
        while (jihao==1){
            for (l = 0; l < k; l++)
            {
                if (b[k] == b[l])
                    break;
            }
            if (l < k){
                b[k] = rand() % 9 + 1;
        }
            if (l == k)
                jihao = 0;
    }
        
        
            
}

}
2015-11-18 13:30
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
收藏
得分:0 
回复 2楼 rjsp
多谢指导。我把printf("%1d ", b[k]);放到后面去之后果然可以了,那么也就是说我之前只是print的位置弄错了,事实上这个数组已经被随机排列了咯
2015-11-18 14:16
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
收藏
得分:0 
回复 4楼 rjsp
学到了,你这个编程里用的好多我都没学过,不过我现在知道他们的意思了。我接下来的目标是把这个随机一阶数组(8个数)放到一个4*4的二阶数组中(每个数字重复两次),让后再把这个二阶数组随机排列。
我编了以下程序,感觉逻辑没有错,但是就是print不出来(各种位置都试了)
int main(void){
    int i, j, k, l, m=0, a[4][4], b[8] = {0};
    srand(time(NULL));
    for (k = 0; k < 8; k++)
    {
        
        b[k] = rand() % 30 + 1;
        
        int jihao = 1;
        while (jihao==1){
            for (l = 0; l < k; l++)
            {
                if (b[k] == b[l])
                    break;
            }
            if (l < k)
            {
                b[k] = rand() % 9 + 1;
        }
            if (l == k)
                jihao = 0;
    }
        printf("%d ", b[k]);
        
            
}
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            a[i][j] = b[m];(我发现这里有错误,b最多8个,但是这里都到b【16】了,正在想办法解决)
            printf("%d ", a[i][j]);
        }   
        m = m + 4;
        
    }
   
   



}

[此贴子已经被作者于2015-11-18 15:02编辑过]

2015-11-18 14:56
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
收藏
得分:0 
回复 6楼 XUMINGHUA
我在main函数外得到了一个二维数组,怎么样才能把这个数组发送到main函数里使用呢
2015-11-18 16:09
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
收藏
得分:0 
回复 8楼 wp231957
其实我想问main函数外面不是还定义了一个函数g吗,然后main函数引用了这个函数g,这个函数g里面我又得到了一个数组,我想把函数g里面的数组通过一定方法让他在main函数里面有个一莫一样的数组,通过指针怎么实现呢,最笨的办法就是一个个发过去吗
2015-11-18 16:24
st3624
Rank: 1
等 级:新手上路
帖 子:27
专家分:3
注 册:2015-11-18
收藏
得分:0 
回复 10楼 wp231957
这个代码我看懂了,但是我发现前提还是main函数里面存在了一个定义好的数组,test函数的作用是把这个数组里的数换个位置,然后我一直想知道的是,假如main函数里的数组是没有定义的,然后是否可以创个函数,把main函数里的数组定义了。。(我还是个菜鸟,说的可能很难理解,不好理解的话就算了,我干脆不用函数了)
下面是我现在的代码,也许看了就明白我的意思了
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int shuzu(int *);
int main(void){
    int g[4][4], i, j;   (这个数组g是空的,我没定义)
    shuzu(&g[0][0]);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("%d\n", g[i][j]);

        }
    }


}

int shuzu(int * q,int len ){
    int i, j, k, l, m = 0, p = 0, n = 0, z, x, a[4][4], b[8] = { 0 };
    srand(time(NULL));
    for (k = 0; k < 8; k++)
    {

        b[k] = rand() % 30 + 1;

        int jihao = 1;
        while (jihao == 1){
            for (l = 0; l < k; l++)
            {
                if (b[k] == b[l])
                    break;
            }
            if (l < k)
            {
                b[k] = rand() % 9 + 1;
            }
            if (l == k)
                jihao = 0;
        }



    }
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 4; j++)
        {
            a[i][j] = b[m];

            m = m + 1;
        }
    }
    for (i = 2; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            a[i][j] = b[n];

            n = n + 1;
        }
    }                (这里得到了一个4*4的二维数组,我想把这个数组放到main函数里的g里用)
                     (之所以用函数主要是因为这里用了太多字母了,全放到main函数里看着麻烦)
    *q = a[i][j];
    return 0;
}
2015-11-18 17:07
快速回复:如何使用随机数生成一组互不相等的数
数据加载中...
 
   



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

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