【问题标题】:Position of elements in vector向量中元素的位置
【发布时间】:2011-01-21 19:42:02
【问题描述】:

我有几个从 cin 读取的向量类型的元素,然后我对向量进行一些计算,它的元素顺序发生了变化。问题是我需要在计算后打印向量元素的位置。这个我不知道怎么解释好,所以我举个例子:

10 1 100 1000

而 10 是第一个元素,1 是第二个,100 是第三个等。计算后向量会发生变化:

100 10 1 1000

所以我应该打印

3 1 2 4 

因为 100 是输入的第三个元素,10 是第一个等等。

我尝试使用数组[1000](因为输入中没有大于 1000 的数字),但它不起作用,因为可以有多个具有相同值的数字,例如:

10 10 10 100

并且输出可以是1 2 3 42 3 1 43 1 2 4 等,但在这里我需要输出1 2 3 4,因为它是“最小的”。

我尝试使用数组 f[1001]f[10] = 1f[100] = 2f[1] = 3 - 如果输入的数字是 10 100 1。但是如果有多个数字具有相同的值,例如10 10 100,那么我的想法就行不通了。请以任何可能的方式帮助我。

【问题讨论】:

    标签: c++ vector position


    【解决方案1】:

    根据您对此类示例的描述: 10(3) 10(2) 10(1) 100(4)

    我们要输出的是 1 2 3 4,而不是 3 2 1 4。

    所以我不认为您的要求只是直接打印初始位置。您必须使位置序列尽可能小。

    以下是我的解决方案:

    使用直接映射哈希表来存储指定元素的所有初始位置。对同一元素的所有初始位置进行排序。所以如果要输出最小的位置序列,只需要从头到尾读取这个指定元素的初始位置即可。

    详细的实现留给你,因为这是一个家庭作业。

    【讨论】:

      【解决方案2】:
      • 如果您知道关联数组是什么,请使用它。
      • 如果输入数量有限,请使用线性搜索确定索引。
      • 考虑使用log10(或strlen)将1、10、100、1000等转化为0、1、2、3等。

      【讨论】:

        【解决方案3】:

        听起来您需要同时存储值和初始位置。你应该可以用一个结构数组来做到这一点:

        struct UserInput
        {
            unsigned int initialPosition;
            int userInputValue;
        };
        
        int main()
        {
            userInput theUserInput[100];
            // increment a counter, starting at 1, and place it in 
            // "initialPosition" in the struct as user input is read
        }
        

        剩下的就交给你了...毕竟是家庭作业 :) 祝你好运。

        【讨论】:

          猜你喜欢
          • 2018-11-26
          • 1970-01-01
          • 2020-12-29
          • 2020-10-04
          • 2010-11-13
          • 2011-10-07
          • 2015-04-15
          • 2020-03-18
          相关资源
          最近更新 更多