题目:SDUT1008 https://acm.sdut.edu.cn/onlinejudge3/solutions/8493820
因为不确定是几维数组,所以都转换为一维数组,
转换方式:
二维数组转换一维数组
设一维数组的小标从 1 开始, 所求下标在一维数组的编号为 sub, 二维数组的列宽为 w
二维到一维
sub = (x-1) * w + y
三维到一维
先让三维到二维,
sub1=(x-1) * w1+y
sub2=(sub1-1) * w2+z;
依次类推 从多维转换到一维数组
for( index = x[n], i = n - 1; i >= 1; i– )
{
index = (index-1) * len[i](列宽) + x[i] ; //转化为一维数组
}
一维数组转到二维数组;
len 宽度 x 确定的坐标 index 一维数组确定的数字
for(int i=n;i>=1;i–)
{
if(index==0)
x[i]=1;
else if(index%len[i]==0)
{x[i]=len[i];
index=index/len[i];
}
else
{
x[i]=index%len[i];
index=index/len[i]+1;
}
}
一维数组转多维数组测试代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include<iostream>
using namespace std;
int main()
{
int len[1000],x[1000]={0};//len 每个维度的宽度, x 每个维度确定的坐标
int index;//一个数
int n;//几维数组
cin>>n;
cin>>index;
for(int i=1;i<=n;i++)
cin>>len[i];//每个维度的宽度
for(int i=n;i>=1;i--)
{
if(index==0)
x[i]=1;
else if(index%len[i]==0)
{x[i]=len[i];
index=index/len[i];
}
else
{
x[i]=index%len[i];
index=index/len[i]+1;
}
}
for(int i=1;i<=n;i++)
cout<<x[i]<<' ';
return 0;
}
可能还有错误,请各位大佬指教