【问题标题】:Ordering multi-dimensional Array排序多维数组
【发布时间】:2014-05-08 22:20:44
【问题描述】:

我目前已经能够成功制作一个数独代码,该代码根据一组随机排列随机交换列,排列只能在排列的前 3 个数字中包含前 3 个数字,以保持棋盘有效,例如 {3,2,1,4,5,6,7,8,9} 有效,但 {4,2,3,1,5,6,7,8,9} 无效,但 .现在我必须找到一种交换堆栈的方法(每 3 列是一个堆栈),这似乎比交换列对我来说更困难。

我在下面提供了我的列交换代码,我想到了一个想法,而不是像在当前代码中那样用随机 permutation1 数组随机排列 1-9 列,而应该尝试生成一个随机排列数组但是,随机数在 1-9 之间;相反,我只想生成一个随机数组,例如 {1,2,3,7,8,9,4,5,6} 或 {7,8,9,4,5,6,1,2 ,3}。

谁能告诉我一种方法,我可以随机生成 9 个数字,但总是按顺序排列 1、2、3、按顺序排列 4、5、6 和按顺序排列 7、8、9。如果没有,有人可以告诉我一个更有效的方法吗?那么我已经提出了?

更新的代码:我更新的代码似乎无法读取我在每个 if/else-if 语句中定义的 permutation1 和 permutation2 数组。

#include <stdio.h>
#include <time.h>

int main(){
    int number, j, k;
    int p=0, q=0;
    int count=0;//initialize count
    int x, i;
    int m=0;
    int permutation1[9];
    int permutation2[3];

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

    srand(time(NULL));
    int randnum=rand()%6+1;

    if(randnum==1){
        permutation1[9]={1,2,3,4,5,6,7,8,9};
        permutation2[3]={1,2,3};
    }
    else if(randnum==2){
        permutation1[9]={1,2,3,7,8,9,4,5,6};
        permutation2[3]={1,3,2};
    }
    else if(randnum==3){
        permutation1[9]={4,5,6,1,2,3,7,8,9};
        permutation2[3]={2,1,3};
    }
    else if(randnum==4){
        permutation1[9]={4,5,6,7,8,9,1,2,3};
        permutation2[3]={2,3,1};
    }   
    else if(randnum==2){
        permutation1[9]={7,8,9,1,2,3,4,5,6};
        permutation2[3]={3,1,2};
    }
    else if(randnum==2){
        permutation1[9]={7,8,9,4,5,6,1,2,3};
        permutation2[3]={3,2,1};
    }

    for(k=1;k<10;k++){
        number=k;

        if(number == 1){
            for (j=0;j<9;j++)
                sudoku[(canonical[p]-1)][j] = number++;
            p++;
        }

        else {
            for (j=0;j<9;j++){
                sudoku[(canonical[p]-1)][j] = number++;
                if (number > 9)  {
                    number = number - 9;
                }
            }
            p++;
        }
    }

    for(i=0;i<9;i++){
        for (j=0;j<9;j++) {
            printf("%2d", sudoku[i][j]);
        }
        printf("\n");
    }

    printf("\nGiven the permutation: ");
    for(p=0;p<3;p++){
        printf("%2d", permutation2[p]);
    }
    printf("\n");

    for(q=0;q<9;q++){
        for(j=0;j<9;j++){
            printf("%2d",sudoku[q][permutation1[j]-1]);
        }
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 不要删除你的问题 Titan。

标签: c random multidimensional-array


【解决方案1】:

谁能告诉我一种方法,我可以随机生成 9 个数字,但总是按顺序排列 1、2、3、按顺序排列 4、5、6 和按顺序排列 7、8、9?

只有六个排列符合您的条件。它们是:

1 2 3 4 5 6 7 8 9
1 2 3 7 8 9 4 5 6
4 5 6 1 2 3 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
7 8 9 4 5 6 1 2 3

所以在 1 到 6 之间选择一个随机数,然后用它来选择你想要的排列。

【讨论】:

  • 我正在考虑这样做,所以它基本上是 6 个 if 语句?
  • @user3571645:您可以改为创建一个二维 6x9 数组,然后索引到该数组中。
  • 我尝试使用 6 if else if 语句,但它似乎没有正确读取我的排列数组
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 2013-08-02
  • 2017-12-18
  • 2017-10-10
  • 2019-10-16
相关资源
最近更新 更多