| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2181 人关注过本帖
标题:数组乱序的问题!我做出来了,但是结果不对!大师支招啊!
只看楼主 加入收藏
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:18 
数组乱序的问题!我做出来了,但是结果不对!大师支招啊!
初始化一个10个元素的数组,赋值为0-10,乱序后,输出;这题用两种方法写出来!下面是我写的代码:
这里面输出结果还会没问题,我尝试了5次,有时候结果还会多出一个零!真不知道什么回事!
    //int s[10];
    //int i=0,cont=9;
    //while(i<10)
    //{
    //    s[i]=i;
    //    i++;
    //}
    //srand(time(0));
    //int j=0,a,b,t;
    //while(j<cont/2)
    //{
    //    a=rand()%10;
    //    s[a]=s[a]+s[j];
    //    s[j]=s[a]-s[j];
    //    s[a]=s[a]-s[j];
    //    j++;
    //}
    //int y=0;
    //while(y<10)
    //{
    //    printf("%d ",s[y]);
    //    y++;
    //}
搜索更多相关主题的帖子: 元素 
2013-12-28 13:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
0-10是擠不進一個10元素的數組中的。

授人以渔,不授人以鱼。
2013-12-28 13:56
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 2楼 TonyDeng
我这里不是0《10吗?

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2013-12-28 13:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我上面是針對你的文字與實際不符說的。迴歸正題,你自己解釋一下那個亂序循環除以2和對10取模是什麼意思?實際上你這個程序是繞了大圈子,再整理一下思路重做吧。

授人以渔,不授人以鱼。
2013-12-28 14:05
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 4楼 TonyDeng
对不起,文字上写错了,赋值的意思的数字1~10的数!除以2是循环5次啊(即使这里不除以2,就是循环10次,结果还是错误!),然后rand()%10 = 1~`10之间的随机数,结果仍然是多一个“0”!
结果:
1 5 9 4 0 8 2 0 6 7(第1次)
6 0 4 7 1 8 2 5 3 9(第2次)
3 2 4 6 0 9 7 0 0 5(第3次)

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2013-12-28 14:18
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 4楼 TonyDeng
我在里面加了一个判断,然后就没有多输出“0”了!大神您觉得怎么样?
在给点思路呀!
    int s[10];
    int i=0,cont=9;
    while(i<10)
    {
        s[i]=i;
        i++;
    }
    srand(time(0));
    int j=0,a;
    while(j<cont)
    {
        a=rand()%10;
        if(j!=a)
        {
            s[a]=s[a]+s[j];
            s[j]=s[a]-s[j];
            s[a]=s[a]-s[j];
        }
        j++;
    }
    int y=0;
    while(y<10)
    {
        printf("%d ",s[y]);
        y++;
    }

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2013-12-28 14:37
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:3 
你的代码只能打乱0~10次, 要是打乱20次,怎么办?
交换两个变量的值的方法可以换一种,
循环可以用for循环.
2013-12-28 15:48
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 4楼 TonyDeng
大师你看我现在这样写这个题目怎么样?我自己感觉这样比较谨慎一些,每个数组的值都会乱序!
    int s[10];
    int i=0;
    while(i<10)
    {
        s[i]=i;
        i++;
    }
    srand(time(NULL));
    int x=1;
    while(x<10)
    {
        int temp = x+rand()%(10-x);
        s[x-1]=s[x-1]+s[temp];
        s[temp]=s[x-1]-s[temp];
        s[x-1]=s[x-1]-s[temp];
        x++;
    }
    int j=0;
    while(j<10)
    {
        printf("%d ",s[j]);
        j++;
    }
    printf("\n");
这样写好比洗牌一样!您觉得还有其他办法吗?

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2013-12-29 12:24
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 7楼 pangshch
兄弟,这次我加上了这行代码!
int temp = x+rand()%(10-x);
感觉问题已经解决了,您觉得呢?您还有什么好办法吗?
我现在还在练习逻辑,for和while循环都一样!
学习知识快,新人练习逻辑困难!
我现在就懂if,while!这些够写题了。哈哈!
等有了逻辑,那些所谓的知识就是语法没有什么稀奇的,不就背背单词呗!

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2013-12-29 12:29
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
回复 9楼 zapjun
要把循环次数x和数组下标分离开.
x的值不影响下标.
随机产生两个数组下标.
打乱的算法用交换两个数组元素的值.
你的程序还是只能用x<10. 改成x<11就错误了.
程序代码:
n = 0;  // 循环次数
    while (n < 50){       
        j = rand()%10;   // 产生数组下标
        i = rand()%10;
        t = a[j];        // 交换数组元素的值
        a[j] = a[i];
        a[i] = t;
        n++;
    }

2013-12-29 13:57
快速回复:数组乱序的问题!我做出来了,但是结果不对!大师支招啊!
数据加载中...
 
   



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

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