2010-02-27 90 views
1

我有一个向量类型中的几个元素是从cin中读取的,然后我对向量执行了一些计算,它的元素顺序被改变了。问题是我需要在计算后打印矢量元素的位置。我不知道该怎么解释这口井,这就是为什么我会举一个例子:元素在向量中的位置

10 1 100 1000 

和10是第1个要素,1是2,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相同的值,那么我的想法不起作用。请以任何可能的方式帮助我。

回答

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 
} 

我会留下,其余由你...因为它毕竟是功课:)好运气。

1
  • 如果知道它是什么,请使用关联数组。
  • 如果输入数量有限,则使用线性搜索来确定索引。
  • 考虑使用日志(或strlen)以变换1,10,100,1000,等成0,1,2,3,等等
0

从你的这样的示例的描述: 10(3)10(2)10(1)100(4)

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

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

以下是我的解决方案:

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

详细的实现由您来完成,因为这是一项家庭作业。