我在矢量类型中有几个从cin读取的元素,然后我对矢量进行了一些计算,并且它的元素顺序发生了变化。问题是我需要在计算后打印矢量元素的位置。我不知道如何解释这就是为什么我会给出一个例子:
10 1 100 1000
和10是第1个元素,1是第2个,100是第3个等。计算后,矢量变化为:
100 10 1 1000
所以我应该打印
3 1 2 4
因为100是输入的第3个元素,10是第1个等等。
我尝试使用数组[1000](因为输入中没有大于1000的数字),但它不起作用,因为可能有多个具有相同值的数字,如:
10 10 10 100
,输出可以是1 2 3 4
或2 3 1 4
或3 1 2 4
等。但在这里我需要输出1 2 3 4
因为它是'最小'。
我尝试使用数组f[1001]
和f[10] = 1
,f[100] = 2
,f[1] = 3
- 如果输入中的数字是10 100 1
。但是如果有多个数字具有相同的值,例如10 10 100
,那么我的想法就不起作用了。请以任何可能的方式帮助我。
答案 0 :(得分: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 :(得分:1)
strlen
)将1,10,100,1000等转换为0,1,2,3等。答案 2 :(得分:0)
根据您对此类示例的描述: 10(3)10(2)10(1)100(4)
我们要输出的是1 2 3 4,而不是3 2 1 4.
所以我认为您的要求不是直接打印初始位置。你必须使位置序列尽可能小。
以下是我的解决方案:
使用直接映射哈希表来存储指定元素的所有初始位置。对同一元素的所有初始位置进行排序。因此,如果您想要输出最小的位置序列,您只需要从头到尾读取该指定元素的初始位置。
详细的实施留待给您,因为它是一个家庭作业。