如何在默认和二维数组中找到顺序扩大元素的位置

How to find the position of sequentially enlarged elements in default and two-dimensional array?

本文关键字:顺序 元素 位置 默认 二维数组      更新时间:2023-10-16

我想在数组中找到顺序放大的元素:

#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
using namespace std;
void main()
{
    int n;
    cout << "How many elements in array? array = ";
    cin >> n;
    int *arr = new int[n];
    for (int i = 0; i < n; i++)
    {
        cout << "Element arr[" << i << "] = ";
        cin >> arr[i];
    }
    cout << "n#### Founded sequentially enlarged elements ####n" << endl;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] + 1 == arr[i + 1])
        {
            cout << "arr[" <<i<< "] = " << arr[i] << endl;
        }
    }
    system("pause");
}

运行代码产生以下输出:

How many elements in array? array = 7
Element arr[0] = 9
Element arr[1] = 13
Element arr[2] = 1
Element arr[3] = 2
Element arr[4] = 3
Element arr[5] = 4
Element arr[6] = 81
#### Founded sequentially enlarged elements ####
arr[2] = 1
arr[3] = 2
arr[4] = 3

为什么它不会在数组中输出所有顺序放大的元素?在示例中,最后一个元素arr[5] = 4缺少。

我如何获得此结果:

arr[2] = 1
arr[3] = 2
arr[4] = 3
arr[5] = 4

示例我的代码二维数组:

#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
using namespace std;
void main()
{
    int n, m;
    cin >> n;
    cin >> m;
    int **arr = new int*[n];
    for (int i = 0; i < n; i++)
    {
        arr[i] = new int[m];
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << "arr[" << i << "," << j << "] = ";
            cin >> arr[i][j];
        }
    }
    cout << "n#### Founded sequentially enlarged elements ####n" << endl;
    int c = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; i < m; j++)
        {
            arr[i] = arr[i] + 1;
            arr[j] = arr[j] + 1;
            if (arr[i][j] == arr[i + 1][j + 1])
            {
                cout << "arr[" << i << "," << j << "] = " << arr[i][j] << endl;
                c++;
            }
            else if (c != 0)
            {
                cout << "arr[" << i << ","<<j<<"] = " << arr[i][j] << endl;
                c = 0;
            }
        }
    }
    system("pause");
}

您可以使用此技巧。

内部如果有条件检查,则是'||'如果第一个条件为true

,操作员会跳过第二个条件
for (int i = 0; i < n ; i++)
{
    if(i>0 && i < n-1){//avoid UB
        if ((arr[i] + 1 == arr[i + 1]) || (arr[i]-1==arr[i-1]) )// the second condition will always be skipped when the first is true. So the second condition will be checked only for the last sequential element
        {
            cout << "arr[" <<i<< "] = " << arr[i] << endl;
        }
    }else if(i==0){
        if (arr[i] + 1 == arr[i + 1])
            {
                cout << "arr[" <<i<< "] = " << arr[i] << endl;
            }
    }else{
         if (arr[i]-1==arr[i-1] )// when i = n-1
        {
            cout << "arr[" <<i<< "] = " << arr[i] << endl;
        }
    }
}

示例:

让数组为:{9,13,1,2,3,4,81}

当光标到达元素4时,i = 5将首先检查带有元素81的条件。或在条件检查中,第二个条件,即'arr [i] -1 == arr [i-1]'将被检查,即在元素4和3之间。

可以将代码清洁并优化到一定级别,但这个想法是在这里的捕获。

您的代码具有逻辑错误。element.you被拒绝打印第二个元素。这是为什么每当arr [5] == arr [4]而不等于arr [6]的原因,这就是为什么不显示它的原因。

这是以下代码生成您预期的结果。

查看for loop.add按照您的循环。

int c=0;//checking if sequence is found
for (int i = 0; i < n-1; i++)
{
    if (arr[i] + 1 == arr[i + 1])
    {
        cout << "arr[" <<i<< "] = " << arr[i] << endl;
        c++;//increasing the counter if sequence is found
    }
    else if(c!=0)
    {
        cout << "arr[" <<i<< "] = " << arr[i] << endl;//printing the seccond element to if further comparison returns false.
        c=0;//reset counter which tells that sequence is over.
    }
}
相关文章: