RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1564229
Accepted
user23328595
user23328595
Asked:2024-02-01 07:05:56 +0000 UTC2024-02-01 07:05:56 +0000 UTC 2024-02-01 07:05:56 +0000 UTC

填充静态数组而不重复数字

  • 772
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
/* Написать программу которая заполняет массив 10 элементов диапазон значений 
случайных чисел 20, и в массиве не должно быть одинаковых значений!*/
void main()
{
    setlocale(LC_ALL, "ru");
        srand(time(NULL));
        int const macciv = 10;
        int arr[macciv]{};
        int end = 0;
        int j = 0;
        for (int i = 0; i < macciv; i++)
        {   
                arr[i] = rand() % 20;       
            
        }
        
        while (true)
        {
            if (j == end)
            {
                end++;
            }

            else
            {
                if (arr[j] != arr[end]) 
                {
                    end++;
                    
                    if (end == 9)
                    {
                        end = 0;
                        j++;
                    }

                }
                else
                {
                    arr[end] = rand() % 20;
                    j = 0;
                    end = 1;
                }
            }
            
            if (j == 9)
            {
                break;
            }
            
        }
        
        for (int k = 0; k < macciv; k++)
        {
            cout << arr[k] << endl;
        }
}

我写了一个程序来解决用不重复数字填充数组的问题,因为我只知道条件,循环,静态数组,rand,继续和中断函数,仅此而已,我最近刚刚开始学习C++,在编译时它说它完成了代码-1073741819的工作,我不明白问题是什么,循环很长,但它不应该是无休止的,因为迟早它会创建我需要的数组? ..错误表明对不存在或已删除元素的内存访问,但是当计算机访问这个元素时以及为什么访问它以及它是什么类型的元素,因为据我了解,循环只是不断地重写当找到匹配项时,数组是相同的,程序不会到达带有输出的循环。

c++
  • 3 3 个回答
  • 63 Views

3 个回答

  • Voted
  1. Falcon
    2024-02-01T14:00:34Z2024-02-01T14:00:34Z

    我对C++了解不多。我对这段代码做了一些修改,很可能错误在于 if (j == end) 的检查,end 的值增加了,但 j 没有更新,结果,数组索引丢失了,这抛出错误。您可以稍微简化代码并摆脱如此多的 if 构造,比方说,重写重复检查。例如:

    #include <ctime>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    void main()
    {
        srand(time(NULL));
        const int macciv = 10;
        int arr[macciv]{};
        int i = 0;
        while (i < macciv)
        {
            int randomNumber;
    
            do
            {
                randomNumber = rand() % 20;
    
                // Проверка наличия дубликата
                bool isDuplicate = false;
                for (int j = 0; j < i; j++)
                {
                    if (arr[j] == randomNumber)
                    {
                        isDuplicate = true;
                        break;
                    }
                }
    
                if (!isDuplicate)
                    break;
    
            } while (true);
    
            arr[i] = randomNumber;
            i++;
        }
    
        for (int k = 0; k < macciv; k++)
        {
             cout << arr[k] << endl;
        }
    
    
    }
    
    • 0
  2. Best Answer
    Harry
    2024-02-01T15:39:54Z2024-02-01T15:39:54Z

    您的代码无法编译,但原则上很清楚您想要什么 - 添加新代码时,请检查现有元素。这可以更简单地完成:

    int main()
    {
        srand(time(NULL));
        int const macciv = 10;
        int arr[macciv]{};
        for(int i = 0; i < macciv; ++i)
        {
            bool uniq = true;
            do {
                uniq = true;
                arr[i] = rand() % 20;
                for(int j = 0; j < i; ++j)
                    if (arr[i] == arr[j]) { uniq = false; break; }
            } while(!uniq);
        }
    
        for (int k = 0; k < macciv; k++)
        {
            cout << arr[k] << "  ";
        }
        cout << endl;
    }
    

    虽然这不是最有效的方法...

    • 0
  3. Stanislav Volodarskiy
    2024-02-01T22:59:04Z2024-02-01T22:59:04Z

    从 20 个数字中随机选择 10 个元素 - Fisher-Yates 洗牌:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define R 20
    #define N 10
    
    int main()
    {
        srand((unsigned)time(NULL));
    
        // заполнение последовательными числами
        int a[R];
        for (int i = 0; i < R; ++i)
        {
            a[i] = i;
        }
    
        // отбор случайного подмножества
        for (int i = 0; i < N; ++i)
        {
            int j = i + rand() % (R - i);  // случайный j: i <= j < R
            int temp = a[i];               // поменять местами a[i], a[j]
            a[i] = a[j];
            a[j] = temp;
        }
    
        // печать
        for (int i = 0; i < N; ++i)
        {
            printf(" %d", a[i]);
        }
        printf("\n");
    }
    
    $ gcc temp.c
    
    $ ./a.out 
     7 9 3 18 6 19 14 13 8 2
    
    $ ./a.out 
     11 3 7 14 16 15 18 5 4 9
    
    $ ./a.out 
     18 14 9 12 16 6 3 15 2 11
    
    • 0

相关问题

  • 编译器和模板处理

  • 指针。找到最小数量

  • C++,关于枚举类对象初始化的问题

  • 函数中的二维数组

  • 无法使用默认构造函数创建类对象

  • C++ 和循环依赖

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5