查找升序列表中的第一个和最后一个数字

时间:2015-10-17 04:40:48

标签: c++ sorting

我正试图找到一种方法来编写一个程序,该程序将采用“n”项,并找出它是否在提升。如果列表没有提升,找到违反此订单的FIRST号码并打印它的索引位置,i,然后找到违反该号码的最后一个号码。

例如:2 3 4 2 3 2 3 4 1 - 输出应该是:元素#4正在下降&&元素#9是LAST descen

编辑:我已经解决了如何找到FIRST号码而不是最后一个号码

这是我的代码:

#include <iostream>

using namespace std;

int main(){
    int num, inputNum, i;
    int nextNum=0;
    int violator1=0, violator2=0; 
    int elementNum1=0, flag1=0;
    int elementNum2=0, flag2=0;

    cout << "Enter how much numbers you want to enter in list: ";
    cin >> num;

    for (i = 0; i < num; i++){
        cout << "Please enter a number: ";
        cin >> inputNum;

        if (inputNum >= nextNum){ 
            nextNum = inputNum;
        }
        else {
            flag1 = 1; /*The flag is set to '0' when the next number in      list has descended*/
            violator1 = inputNum;
            if (elementNum1 == 0) /*This condition will only run once because elementNum == 0 only once*/
                elementNum1 = i+1;
        }
    }

/*The flag value is determined within the loop to find the descending value*/
    if (flag == 0){ /*If the flag is UNchanged ie = 1*/
        cout << "These numbers are in ascending order." << endl;
    }
    else {
        cout << "These numbers are NOT in ascending order." << endl;
        cout << "Element Number '" << elementNum << "' was the violating number." << endl;
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

我已经想出了这个。

要查找列表中一个下降点的最后一个违规者,您必须初始化一个新标志并将其设置为在找到第一个违规者后更改。

在上面的示例中,找到第一个违规者后,element1 == 0的条件应为false。一旦该条件失败,就需要有一个else语句将新标志更改为除了一个之外的其他内容以及每次发现违规者时更改索引号的新element2变量。