C++ 以特殊顺序C+填充矩阵+;
我想用一个特殊顺序的值填充一个8 x 8的矩阵(见下面的例子),但我不知道怎么做。每个数字代表顺序号:例如:矩阵中的#3是a的第三个值,例如,我要添加的测量值。 命令应为:C++ 以特殊顺序C+填充矩阵+;,c++,C++,我想用一个特殊顺序的值填充一个8 x 8的矩阵(见下面的例子),但我不知道怎么做。每个数字代表顺序号:例如:矩阵中的#3是a的第三个值,例如,我要添加的测量值。 命令应为: 1 2 5 6 17 18 21 22 3 4 7 8 19 20 23 24 9 10 13 14 25 26 29 30 11 12 15 16 27 28 31 32 33 34 37 38 49 50 53 54 35
1 2 5 6 17 18 21 22
3 4 7 8 19 20 23 24
9 10 13 14 25 26 29 30
11 12 15 16 27 28 31 32
33 34 37 38 49 50 53 54
35 36 39 40 51 52 55 56
41 42 45 46 57 58 61 62
43 44 47 48 59 60 63 64
有人知道这样做的算法吗?
我已经试过了,但这不是一个好方法,而且它对整个矩阵都不起作用
int b= 0, ii = 0, a = 0, iii = 0
i are different measurement values
and now a for loop
if (ii == 1)
{
b++;
}
if (ii == 2)
{
a++, b--;
}
if (ii == 3)
{
b ++;
}
tempMatrix[a][b] = i;
cout << "TempMatrix " << tempMatrix[a][b] << " a " << a << " b " << b << endl;
if (ii == 3)
{
ii = -1;
a --;
b ++;
}
if (iii == 7)
{
a = a + 2;
b = 0;
iii = -1;
}
intb=0,ii=0,a=0,iii=0
i是不同的测量值
现在是for循环
如果(ii==1)
{
b++;
}
如果(ii==2)
{
a++,b--;
}
如果(ii==3)
{
b++;
}
tempMatrix[a][b]=i;
不能使用递归:
#include <iostream>
using namespace std;
void f(int a[8][8], int current, int x, int y, int size) {
if (size == 1) {
a[x][y] = current;
return;
} else {
size /= 2;
int add_for_each_square = size * size;
f(a, current, x, y, size);
f(a, current + add_for_each_square, x, y + size, size);
f(a, current + 2 * add_for_each_square, x + size, y, size);
f(a, current + 3 * add_for_each_square, x + size, y + size, size);
}
}
int main() {
int a[8][8];
f(a, 1, 0, 0, 8);
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
cout << a[i][j] << " ";
}
cout << endl;
}
}
#包括
使用名称空间std;
空f(整数a[8][8],整数当前,整数x,整数y,整数大小){
如果(大小==1){
a[x][y]=电流;
回来
}否则{
尺寸/=2;
int加上每个正方形的大小=大小*大小;
f(a,电流,x,y,尺寸);
f(a,当前+为每个平方加上平方,x,y+大小,大小);
f(a,当前+2*为每一个方格添加方格,x+大小,y,大小);
f(a,当前+3*为每个正方形添加,x+大小,y+大小,大小);
}
}
int main(){
INTA[8][8];
f(a,1,0,0,8);
对于(int i=0;i<8;++i){
对于(int j=0;j<8;++j){
cout如果矩阵总是固定大小,那么您可以为矩阵中的行和列索引生成两个查找表。然后,只需将索引传递给这些表,即可获得矩阵中所需的位置
const auto MATRIX_SIZE = 8;
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> row_lookup = {{...}}; //put pre-computed values here.
const std::array<int, MATRIX_SIZE*MATRIX_SIZE> col_lookup = {{...}};
for(size_t i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++)
{
auto val = get_coefficient(i);
auto row = row_lookup[i];
auto col = col_lookup[i];
mat[col][row] = val;
}
const auto MATRIX\u SIZE=8;
const std::array row_lookup={{…};//将预先计算的值放在此处。
常量std::数组列查找={{…};
对于(大小i=0;i<矩阵大小*矩阵大小;i++)
{
auto val=获取_系数(i);
自动行=行查找[i];
自动列=列查找[i];
mat[col][row]=val;
}
你尝试过什么?什么不起作用?堆栈溢出不是一种代码编写服务如果你已经知道矩阵的大小和要输入的数字,那么添加数字应该很简单。如果你想用这种模式生成一个nxn矩阵,那是另一个问题。我不想要完整的代码。只是一个想法,如何实现它。如果是这样的话一个固定的大小你不需要一个特殊的算法,如果你想不出一个简洁的方法,你可以直接把你的作业拼写出来mat(1,1)=第一次测量;mat(1,2)=第二次测量;mat(2,1)=third_measurement;//诸如此类
你试过调试你的代码吗?a和b的值正确吗?我们需要a、输入、预期输出和实际输出来进一步帮助OP尝试按特定顺序将数组的值设置为非指定值。例如,[1][0]
应该设置为第三个值,而不是3。@AlanBirtles可以通过a[x][y]=val[current]
或执行类似b[x][y]=val[a[x][y]]
的操作轻松修复。此外,您还可以编写一个函数,该函数采用x,y
并使用相同的技术返回订购号。OP对他的问题进行了评论:“只是个主意,怎么做”