新手C ++程序员(使用Visual Studio 2013)。
我想写一个函数,我可以插入一个数字,它将检查该数字是否在它的正上方,下方或旁边是零,然后返回零的位置。
例如,如果我想检查数字2的周围是(1,1),我希望它返回(如果有的话)0的位置,即(1,2)。我该怎么做呢?我应该使用矩阵字段(int a [] []例如。)?
该函数将用于确定数字(例如2)是否能够与另一个数字交换位置(在我的情况下为零),并且只有在零位于其正上方,下方或旁边时才能执行此操作。
3 5 6 8
9 2 0 7
1 8 9 3
1 3 5 7
这是我的代码到目前为止,它只创建了一个向量矩阵(对不起,如果我使用的是不正确的术语),将1到15之间的数字随机化并将其放在(行,列),然后替换为所选(行,列)中的数字,其函数为set_zero,为零。
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <vector>
using namespace std;
void set_zero(int row, int column, vector<vector<int>>& v){
v[row][column] = 0;
}
void scan_zero(vector<vector<int>>& v){
}
int _tmain(int argc, _TCHAR* argv[])
{
const int x = 4;
vector<vector<int>> v(x, vector<int>(x));
for (int i = 0; i < x; i++){
for (int j = 0; j < x; j++){
v[i][j] = rand() % 15 + 1;
}
}
set_zero(1, 2, v);
for (int i = 0; i < x; i++){
for (int j = 0; j < x; j++){
cout << setw(3) << v[i][j] << " ";
}
cout << endl;
}
}
我尝试在网上搜索类似的东西,但我还没有找到它,我确定它在那里,但我不知道如何正确地制定搜索问题。
答案 0 :(得分:0)
是的,让我们尝试使用2d数组(模拟矩阵,int [] []引用2d矩阵)。
按照您的示例:您要检查相邻条目是否为零。让我们用(1,1)的例子为2.
一系列if语句可能是您的解决方案。
设矩阵是某个大小的整数2d矩阵。
如果矩阵[1] [2]等于0则 返回位置右 如果矩阵[1] [0]等于0则 返回positionLeft 如果矩阵[0] [1]等于0则 返回位置 如果矩阵[2] [1]等于0则 return positionDown
由于您只是检查直接相邻的索引,因此4个if语句对于检查相邻零点的想法并不是那么糟糕。
答案 1 :(得分:0)
我认为这可能是一个解决方案,但感觉有点原始。
因为我无法弄清楚如何返回两个值,我只做了两个函数,一个返回行的位置,一个列为零。
当它延伸到矩阵的边界之外我也遇到了问题,所以因为我有一个4x4矩阵,我改为6x6并用-1s的帧包围它。
int scan_zero_r(int r, int c, vector<vector<int>>& v){
int l = r + 1, k = r - 1;
if (v[l][c] == 0)
return l;
if (v[k][c] == 0)
return k;
else
return r;
}
int scan_zero_c(int r, int c, vector<vector<int>>& v){
int l = c + 1, k = c - 1;
if (v[r][l] == 0)
return l;
if (v[r][k] == 0)
return k;
else
return c;
}