| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2915 人关注过本帖
标题:求解,为什么不能重新检测数字是否重复
只看楼主 加入收藏
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 10楼 wengbin
完全无需递归,效率太低,修改如下即可:
void chongf(int* ar, int d)//判断是否重复数字,如果是则重新生成一个随机数
{
    for(int i = 0; i<d; i++)
    {
        if(ar[i] == ar[d])
        {
            ar[d] = rand() % 35 + 1;
            i=-1;  //复位i值
        }
    }
}

能编个毛线衣吗?
2016-01-04 22:03
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
回复 11楼 wmf2014
嗯嗯,受教了
2016-01-04 23:50
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
收藏
得分:0 
回复 7楼 wmf2014
版主说的太好了。正在解决这些问题。
2016-01-05 11:03
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
收藏
得分:0 
回复 10楼 wengbin
版主良心···为我等小白解答。感谢··
2016-01-05 11:04
tredy6t
Rank: 2
等 级:论坛游民
帖 子:41
专家分:59
注 册:2015-8-6
收藏
得分:0 
加srand(time(0));
2016-01-05 12:00
demon90s
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:121
注 册:2016-1-3
收藏
得分:0 
回复 楼主 qq_s15
楼主建议你把判断重复的代码和生成数组的独立出来。下面是我改写的代码:

#include <stdio.h>
#include <time.h>

void make_array(int a[], int n)
{
    int i, j;
    int repeate = 0;

    for (i = 0; i < n; i++)
    {
        a[i] = rand() % 35 + 1;
    }

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (i != j && a[i] == a[j])
            {
                repeate = 1;
                break;
            }
        }

        if (1 == repeate)
            break;
    }

    if (1 == repeate)
        make_array(a, n);
}

int main(void)
{
    int a[19];
    int i;

    srand((int)time(NULL));

    make_array(a, 19);

    for (i = 0; i < 19; i++)
        printf("%3d", a[i]);

    putchar('\n');

    return 0;
}
收到的鲜花
  • qq_s152016-01-06 10:47 送鲜花  5朵  
2016-01-05 13:16
demon90s
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:121
注 册:2016-1-3
收藏
得分:0 
回复 11楼 wmf2014
的确这个方法好

[此贴子已经被作者于2016-1-5 13:26编辑过]

2016-01-05 13:18
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
收藏
得分:0 
回复 15楼 tredy6t
已加,,谢谢
2016-01-05 14:16
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
收藏
得分:0 
回复 16楼 demon90s
感谢,
2016-01-05 14:18
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
收藏
得分:0 
回复 10楼 wengbin
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
void chongf(int* ar, int d)//判断是否重复数字,如果是则重新生成一个随机数
{
    for (int i = 0; i<d; i++)
    {
        if (ar[i] == ar[d])
        {
            ar[d] = rand() % 35 + 1;
            i = -1;
        }
    }
}

int main()
{
    int arr[9][19];
    srand(time(0));
    for (int k = 0; k < 9; k++)
    {
        for (int i = 0; i < 19; i++)
        {
            arr[k][i] = rand() % 35 + 1;
            chongf(arr, i);
            printf("%d\t", arr[k][i]);
        }
        printf("\n\n");
    }

    system("pause");
    return 0;
}


如果是使用二维数组就不行了··这是为什么呢。
2016-01-06 10:59
快速回复:求解,为什么不能重新检测数字是否重复
数据加载中...
 
   



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

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