如果用户从数组中输入数字,我如何获得2D数组的索引

时间:2015-11-17 15:41:29

标签: c++ arrays

#include<iostream>
using namespace std;
int main()
{
    int f[5][5], k = 1, n;
    for (int p = 0; p<5; p++)
    {
        cout << "Enter Elements Of Rows: " << k << endl;
        k++;
        for (int m = 0; m<5; m++)
        {
            cin >> f[p][m];//It take's rows as input
        }
    }
    //What should i do now because i can't understand how to print the index of n element.
    cout << "Enter the number you want to search:  ";
    cin >> n;
    //What should i do after this to get the index of the number n?
}

这段代码非常适合将行作为输入,但是当涉及索引时,一切都非常错误。搜索和工作了很多,但无法找到任何东西。

3 个答案:

答案 0 :(得分:1)

如果您的意思是将1D索引转换为2D索引,那么这样做:

int x = n % 5;

int y = n / 5;

假设这种格式:

0 1 2 3 4

5 6 7 8 9

9 10 11 12 13

14 15 16 17 18

19 20 21 22 23

然后使用以下方式访问它:

int result = f[x][y];

答案 1 :(得分:0)

由于您没有关于元素可能位置的任何信息,我建议您只进行线性搜索(意思是:查看每个元素并检查它是否是您要查找的元素)。

基本思想是你完成了与你已经完全相同的嵌套循环,但你做的是检查而不是插入,如下所示:

...
...
cout << "Enter the number you want to search:  ";
cin >> n;

for (int p = 0; p<5; p++)
{

    for (int m = 0; m<5; m++)
    {
        if (f[p][m]==n){
          cout << "found " << n << " at " << p << " " << m << "\n";
        } 
    }
}
...
...

这真的只是一个非常基本的想法。

一些暗示要考虑的事项:

  • 您想如何处理重复的条目? (输出一次?你需要打破或者标志)
  • 如果2D数组中没有这样的元素怎么办? (想要说“elem not found”之类的东西......再次,需要一面旗帜。

我希望你能自己从这里继续。

改进代码的一些想法:

  • 参数化'5'。像int d = 5一样。然后使用d初始化数组并打破for循环。
  • 请注意k与您的p密切相关。也许你总是可以使用p?我会让你弄清楚如何。

答案 2 :(得分:0)

简单蛮力实施的例子:

#include<iostream>
#include<vector>
#include<utility>
using namespace std;
int main()
{
    int f[5][5], k = 1, n;
    for (int p = 0; p<5; p++)
    {
        cout << "Enter Elements Of Rows: " << k << endl;
        k++;
        for (int m = 0; m<5; m++)
        {
            cin >> f[p][m];//It take's rows as input
        }
    }
    cout << "Enter the number you want to search:  ";
    cin >> n;
    vector<pair<int, int> > result;
    for (int p = 0; p<5; p++)
    {
        for (int m = 0; m<5; m++)
        {
            if (n == f[p][m]) result.push_back(pair<int, int>(p, m));
        }
    }
    cout << "Search results:" << endl;
    for (std::vector<std::pair<int, int> >::iterator it = result.begin(); it != result.end(); it++)
    {
        cout << "[" << it->first << "][" << it->second << "]" << endl;
    }
    return 0;
}