啊这啧啧啧 发表于 2023-4-12 18:09:14

随机取六个球问题,代码有一点点小问题

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

int main() {
               
    srand((unsigned int)time(NULL));                              //随机取六个球问题            
                                                                                    //有重复取数,想问一下友友怎么解决{:10_297:}
    int arr = {0};
    int value = 0;//接受随机数
    int flag=0;//arr里有几个球
    int j;

    for(int i=0;i<6;i++){//取六个随机数
            value = rand()%32 + 1;
               
            for( j=0;j<flag;j++){//小球数如果拿出过,则重新取数
              if(value==arr){
                      i--;
                      break;
                  }       
           }
      arr=value;//否则计数
            flag++;
}
       
       for(int i=0;i<6;i++){
           printf("%d ",arr);
   }
        return 0;

}

isdkz 发表于 2023-4-12 18:15:09

你的代码有一个小错误,你应该在循环内部检查value是否等于arr,而不是arr。以下是修复后的代码:

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

int main() {

    srand((unsigned int)time(NULL));

    int arr = {0};
    int value = 0;
    int flag = 0;
    int j;

    for (int i = 0; i < 6; i++) {
      value = rand() % 32 + 1;

      for (j = 0; j < flag; j++) {
            if (value == arr) {
                i--;
                break;
            }
      }

      if (j == flag) { // 如果没有重复的值,将值添加到数组中
            arr = value;
            flag++;
      }
    }

    for (int i = 0; i < 6; i++) {
      printf("%d ", arr);
    }

    return 0;

}


现在这段代码应该可以正确地生成六个不同的随机数并将它们存储在数组arr中。

wuliangtdi 发表于 2023-4-12 18:21:46

本帖最后由 wuliangtdi 于 2023-4-12 18:23 编辑

如果你需要生成不重复的小球编号,你可以使用一个布尔数组来标记数字是否已经被选中。首先将布尔数组所有元素初始化为false。每次生成一个随机数时,检查它是否已经被选中,如果没有,则将对应的布尔数组元素设置为true,并将该随机数添加到数组中。如果该随机数已经被选中,则不添加到数组中,并生成下一个随机数。

下面是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand((unsigned int)time(NULL));
    int arr = { 0 };
    int value = 0;
    int flag = 0;
    bool used = { false }; // 初始化所有数字为未使用状态

    while (flag < 6) { // 只有当选出了6个数字后才退出循环
      value = rand() % 32 + 1;
      if (!used) { // 如果数字没有被使用,则添加到数组中
            used = true;
            arr = value;
            flag++;
      }
    }
    for (int i = 0; i < 6; i++) {
      printf("%d ", arr);
    }
    return 0;
}

这个代码使用了一个布尔数组来标记数字是否已经被使用。如果某个数字被使用了,那么对应的布尔数组元素将被设置为true。在生成随机数时,程序将检查该数字是否已经被使用,如果已经被使用,程序将继续生成下一个随机数,直到找到一个没有被使用过的数字。这样,程序将保证每个数字只会被选中一次。
https://i.328888.xyz/2023/04/12/iXkbGQ.png
来自ChatGPT

wuliangtdi 发表于 2023-4-12 18:22:41

isdkz 发表于 2023-4-12 18:15
你的代码有一个小错误,你应该在循环内部检查value是否等于arr,而不是arr。以下是修复后的代码: ...

你这不行,没有图片{:10_307:}

isdkz 发表于 2023-4-12 18:25:24

wuliangtdi 发表于 2023-4-12 18:22
你这不行,没有图片

你这图片是你自己运行的吧

wuliangtdi 发表于 2023-4-12 18:27:33

isdkz 发表于 2023-4-12 18:25
你这图片是你自己运行的吧

是的{:10_307:}

歌者文明清理员 发表于 2023-4-12 18:31:36

wuliangtdi 发表于 2023-4-12 18:27
是的

截图会暴露你的操作系统版本。比如你的系统被我识别为
WIN11

wuliangtdi 发表于 2023-4-12 18:40:34

歌者文明清理员 发表于 2023-4-12 18:31
截图会暴露你的操作系统版本。比如你的系统被我识别为
WIN11

无所谓,操作系统罢了,大部分的人现在不都是win10和win11嘛。这个倒还好

歌者文明清理员 发表于 2023-4-12 18:42:33

wuliangtdi 发表于 2023-4-12 18:40
无所谓,操作系统罢了,大部分的人现在不都是win10和win11嘛。这个倒还好

我打算降级 win7…从win11一路降级,目前装了个虚拟机体验了下,非常好

wuliangtdi 发表于 2023-4-12 18:47:19

歌者文明清理员 发表于 2023-4-12 18:42
我打算降级 win7…从win11一路降级,目前装了个虚拟机体验了下,非常好

win 7有些软件不支持了,Py版本高点的只支持win10以上的了,chrome和edge现在也不再对win7提供支持了。

歌者文明清理员 发表于 2023-4-12 18:48:34

wuliangtdi 发表于 2023-4-12 18:47
win 7有些软件不支持了,Py版本高点的只支持win10以上的了,chrome和edge现在也不再对win7提供支持了。

都与 Microhard 公司有那么亿点点关系

因为win8、10、11都会自动检查更新,suo yi da suan jiang ji

wuliangtdi 发表于 2023-4-12 18:51:38

本帖最后由 wuliangtdi 于 2023-4-12 19:00 编辑

歌者文明清理员 发表于 2023-4-12 18:48
都与 Microhard 公司有那么亿点点关系

因为win8、10、11都会自动检查更新,suo yi da&#81 ...

现在win10也不错了。我是没咋感受会自动更新。反正也有工具可以停止自动更新的(比如Lenovo Quick Fix)
https://i.328888.xyz/2023/04/12/iXCVVk.png

Lenovo Quick Fix要钱了,傻逼联想

jhq999 发表于 2023-4-12 21:28:17

给一个洗牌的方式
#include <iostream>
#include<time.h>
using namespace std;
int main()
{
    int ball,i,j,t;
    for(i=1;i<=32;i+=1)
    {
      ball=i;
    }

    srand((unsigned int)time(0));
    for(i=1;i<=6;i+=1)
    {

      j=rand()%(32-i);
      t=ball;
      ball=ball;
      ball=t;
      cout<<ball<<" ";
    }

    return 0;
}

两手空空儿 发表于 2023-4-14 10:22:43

GPT太强大了,哈哈哈哈
页: [1]
查看完整版本: 随机取六个球问题,代码有一点点小问题