0

我的标题有点令人困惑,但我正在尝试编写一个循环来更改 81 个具有不同名称的数组中的值。我想用一个值或一个值数组启动数组。这是我的数独求解器代码的一部分,因为我认为我解释得不好。

int cell1[], cell2[9], cell3[9],cell4[9]......cell81[9]; // <-- this will make 81 cells with an array that can hold a possible of 9 candidates

cout << "User input: << endl; // lets use ...1.5...14....67..8...24...63.7..1.9.......3.1..9.52...72...8..26....35...4.9...
                              // as an example

假设我将该输入存储到一个字符数组中,并且我将使用一个循环来决定是启动给定值还是“。” 作为一个空值。

对于空值,我希望用 1-9 个值初始化数组。我可以用这段代码轻松做到这一点。

If( ( (int)charArray[ 0 ] - 48) > 0 ) {   // type cast to int. Neg = initialize array with 1-9
                                         // pos = initialize with original value

cell1[ 0 ] =  (int)charArray[ 0 ] - 48;
} else {

cell1[ 9 ] = { 1,2,3,4,5,6,7,8,9};
}

我想避免为 81 个单元格编写此代码 81 次(被视为编写垃圾代码)。我不知道如何编写循环。我愿意接受有关如何使用类、函数等进行不同编码的建议。在此先感谢。

4

2 回答 2

3

将数组创建cell为具有 81 行和 9 列的二维数组。

int cell[81][9];

现在您可以使用语法遍历它们cell[r][c]。例如,

for( i = 0; i < 81; ++i ) {
  cell[i][0] = 1;
  // ...
  cell[i][8] = 9;
}

如果您希望避免使用二维数组,则可以将数组声明为一维数组,并适当地对其进行索引。

int cell[81 * 9];

for( i = 0; i < 81; ++i ) {
  cell[i + 0*81] = 1;
  // ...
  cell[i + 8*81] = 9;
}
于 2012-10-25T05:06:17.637 回答
1
int a1[9],a2[9],a3[9],a4[9],...

void init_array(int *ptr, const char *chr, int len, int start){
  for(int i = start; i < len; i++){
     if(chr[i] == '.')continue;
     ptr[i] = chr[i]-'0';//converts character to integer.
  }
}

int main(int argc, char **argv)
{
    std::string str;
    cin >> str;
    init_array(a1,str.c_str(),9,0); init_array(a2,str.c_str(),9,9/*increment by 9*/);...
    //.. 
    return 0;
}

编写一个名为的函数,该函数init_array()接受一个整数指针并为您初始化数组。您可以通过这种方式避免重复代码。

于 2012-10-25T05:09:03.403 回答