时间戳转换器

如何将数组中的连续数字设置为0 C++

日期:2023-02-21     浏览:261    
【中文标题】如何将数组中的连续数字设置为0 C++【英文标题】:How to get consecutive numbers in array set to 0 C++ 【发布时间】:2020-08-06 03:50:27 【问题描述】:

这是它应该做的: 此函数应采用 2D 数组,并应检查每一行和每一列是否存在在行或列上连续重复/匹配 3 次的任何值。它还应该识别是否有超过 3 个并且应该将其全部视为 1 个匹配项。匹配的值应全部设置为零。使用相同的常量大小。您不知道这些值可能是什么(在下面的示例中,它们是 1,2 和 3,但它可以是除零以外的任何值)。 void checkMatches(int[ARRAY_SIZE][ARRAY_SIZE] arr)

这就是我所拥有的:

const int ARRAY_SIZE=8;
void checkMatches(int arr9[ARRAY_SIZE][ARRAY_SIZE]) 
    
    int count = 0;

    //check each row
    for (int row = 0; row < ARRAY_SIZE; row++) 
        int i = arr9[row][0];
        for (int col = 1; col < ARRAY_SIZE; col++) 
            if ( arr9[i] == arr9[i + 1]) 
                count++;
                if (count >= 3) 
                    i = 0;
                
            
            else 
                count = 0;
            
        
    
    //check each column
    for (int col = 0; col < ARRAY_SIZE; col++) 
        int i = arr9[0][col];
        for (int row = 1; row < ARRAY_SIZE; row++) 
            if (arr9[i] == arr9[i + 1]) 
                count++;
                if (count > +3) 
                    i = 0;
                
            
            else 
                count = 0;
            
        
    



int main()
    int val;
    int arr9test[8][8];

    for (int i = 0; i < 8; i++) 
        for (int j = 0; j < 8; j++) 
            cout << "Enter number to populate the array (include a few consecutive numbers): ";
            cin >> val;
            arr9test[j][i] = val;
        
    
    checkMatches(arr9test);
    cout << "Replacing consecutive numbers with 0's: " << arr9test << endl;


任何提示将不胜感激!

这是我得到的输出。 (非常不是数组) enter image description here

【问题讨论】:

问题是什么?我认为该程序没有做正确的事情。如果是这样,请准确描述会发生什么。 也使用它发布main。所以它会变成Minimal Reproducible Example。 由于其他一些问题,我目前无法运行该程序,但我想知道我的代码是否会按照问题要求执行,或者我是否走错了路。 @cigien 找出问题的最佳方法是解决问题,运行代码并查看它的作用。 我想知道我的代码是否会按照问题所说的那样做,由于其他问题,我无法运行程序来测试它。我也添加了主!谢谢! 【参考方案1】:

目前你的代码有很多问题。

void checkMatches(int arr9[ARRAY_SIZE][ARRAY_SIZE]) // 01

    int count = 0;

    //check each row
    for (int row = 0; row < ARRAY_SIZE; row++) 
        int i = arr9[row][0]; // 02
        for (int col = 1; col < ARRAY_SIZE; col++) 
            if ( arr9[i] == arr9[i + 1])  // 03
                count++;
                if (count >= 3) 
                    i = 0; // 04, 05
                
            
            else 
                count = 0;
            
        
    
    //check each column
    for (int col = 0; col < ARRAY_SIZE; col++) 
        int i = arr9[0][col]; // 02
        for (int row = 1; row < ARRAY_SIZE; row++) 
            if (arr9[i] == arr9[i + 1])  // 03
                count++;
                if (count > +3) 
                    i = 0; // 04, 05
                
            
            else 
                count = 0;
            
        
    

我已经用 // xx 标记了有问题的行,其中 xx 是问题编号,如下所示:

    您正在传入一个没有维度的数组。 也尝试传递尺寸。例如:
void checkMatches(int[][] myArray, size_t xSz, size_t ySz)
    您正在创建一个无用的堆栈变量。删除它。 您正在比较“未来”地址。这与您的循环不兼容(从 1 开始),并且会导致越界行为。这应该修复为使用“过去”地址:
if (arr9[row][col] == arr9[row][col - 1]) 
    您正在写入临时变量“i”,它没有任何作用。您需要写入表本身。
arr9[row][col] = 0;

但是,这本身就是一个问题,因为它只会在第 3 次匹配时写入 0,并且会有效地重置计数,因为下一次比较将与刚刚写入的 0 进行比较。

    您在进行第二遍之前写入结果。 请考虑下表:
1 2 3 4 5 6 7
2 3 4 4 4 4 6
3 2 1 4 1 2 3

如果我理解正确,您希望得到以下内容:

1 2 3 0 5 6 7
2 3 0 0 0 0 6
3 2 1 0 1 2 3

这意味着您应该在阅读时记录地址,并在最后执行更新。

这是您的方法的伪代码重写。为简洁起见,我使用了 C# 元组表示法:

void checkMatches(int[][] arr9, size_t ySz, size_t xSz) // 01

    std::vector<(y, x)> lst; // a vector of some type of tuple structure.
    int count = 0;

    //check each row
    for (size_t row = 0; row < ySz; row++)
    
        for (size_t col = 1; col < xSz; col++)
        
            if ( arr9[row][col] != arr9[row][col - 1])
            
                if (count > 3)
                
                    size_t cl = col - 1;
                    while (count-- > 0)
                    
                        lst.push_back(row, cl--);
                    
                
                else
                
                     count = 0;
                
             
             else
             
                 count++;
             
        

        if (count > 3)
        
            size_t cl = xSz - 1;
            while (count-- > 0)
            
                lst.push_back(row, cl--);
            
        
    

    // check each column
    // TODO: apply the above code to check columns this time.  I won't copy/paste here, you can do that.  Keep adding to lst.

    // Update the table.
    for ((size_t, size_t) xy : lst)
    
        arr9[xy.y][xy.x] = 0;
    

【讨论】:

相关文章

如何在 C++ 中将数组中的所有元素初始化为相同的数字

{】如何在C++中将数组中的所有元素初始化为相同的数字【英文标题】:HowtoinitializeallelementsinanarraytothesamenumberinC++【发布时间】:2010-05-2303:32:29【问题描述】:我正在尝试初始化一个int数组,并将所有内容都设置为-1。我尝试了以...}

如何在数组中存储连续数字,bash脚本?

{】如何在数组中存储连续数字,bash脚本?【英文标题】:Howtostoreacontinousnumberinarray,bashscripting?【发布时间】:2020-03-1406:53:31【问题描述】:在数组中声明和存储一个数字很容易,但问题是用户输入1234,我想将此数字存储为$array[...}

如何将 C++ 数字格式设置为一定精度?

{】如何将C++数字格式设置为一定精度?【英文标题】:HowtosetupC++NumberFormattingtoacertainprecision?【发布时间】:2011-01-2014:10:13【问题描述】:我知道您可以使用iomanip为浮点数设置精度标志(例如,有2.0000而不是2.00)。对于整数,有...}

字符数字 ['0'..'9'] 是不是需要具有连续的数值?

{】字符数字[\\\'0\\\'..\\\'9\\\']是不是需要具有连续的数值?【英文标题】:Arethecharacterdigits[\'0\'..\'9\']requiredtohavecontiguousnumericvalues?字符数字[\'0\'..\'9\']是否需要具有连续的数值?【发布时间】:2012-02-2316:20:51【问题描述】:C++实...}

如何在C ++中将字节数组中的整数转换为数字

{】如何在C++中将字节数组中的整数转换为数字【英文标题】:howtoconvertdigitsfromaintegerinabytearrayinC++【发布时间】:2011-11-1219:58:19【问题描述】:我尝试将数字从9140之类的数字转换为char字节数组,我终于做到了,但由于某种原因...}

如何将 int 的数字分配给数组 c++

{】如何将int的数字分配给数组c++【英文标题】:HowdoIassignthedigitsofinttoarrayc++【发布时间】:2017-04-1404:25:44【问题描述】:请耐心等待,我是新手。我想要做的是将用户输入的内容分成数字到一个数组中,例如:intdigits[10]=0//initial...}

如何将字符串中的所有数字一一读入数组(c++)

{】如何将字符串中的所有数字一一读入数组(c++)【英文标题】:Howtoreadallthenumbersinthestringonebyoneintoarray(c++)【发布时间】:2010-12-1609:33:42【问题描述】:我看到了一个类似的问题,但答案在我的VisualC++6上不起作用。我有一个CStr...}

如何以递减方式拉伸特定的numpy数组项?

{】如何以递减方式拉伸特定的numpy数组项?【英文标题】:Howtostretchspecificitemsofnumpyarraywithdecrement?【发布时间】:2020-09-0506:31:45【问题描述】:给定边界值k,是否有一种矢量化的方式将每个数字n替换为从n-1到k的连续降序数字?...}

如何在numpy中创建一个连续数字数组?

{】如何在numpy中创建一个连续数字数组?【英文标题】:Howtocreateaarrayofconsecutivenumbersarrayinnumpy?【发布时间】:2021-10-2604:35:53【问题描述】:我正在寻找如下生成一个数组:array([[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9],[9,10]])这是我...}

如何在 C++ 中将数字字符串拆分为数组? [复制]

{】如何在C++中将数字字符串拆分为数组?[复制]【英文标题】:HowcanIsplitstringofnumberstoarrayinC++?[duplicate]【发布时间】:2019-06-0614:55:34【问题描述】:我有strings="499345628";我需要将此字符串拆分为数组:[4,99,34,56,28]我是用java...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号