一道C++数值计算题
打网络游戏得到一个极品装备,价值 495 思明论坛!下次努力哦!……带状矩阵A
{1 6 10 }
{13 2 0 11 }
{ 14 3 8 12}
{ 0 4 9}
{ 16 5}
要求转换为矩阵B 主对角线1、2、3、4、5为一列,依然分割矩阵
{0 1 6 10}
{1320 11}
{1438 12}
{0 49 0 }
{1650 0 }
压缩存储,空闲单元用0元素填充
我已经知道怎么做了,想看看大伙的算法 数学=头晕```````` 你参加了我们组织的狩猎,获得了 394 思明论坛的猎物兑现金!
下次努力哦!……呃....
C++没学好.... :sad C++偶也没学好。。。。。。。。。。。。!
:handshake 你在街头拐角捡到一条珍珠项链,交还了失主,失主送给你 444 思明论坛的酬金!热心值加 3 !
下次努力哦!……我的输出乱了一点
double** fm = new double*;
for(i=0;i<5;i++)
fm = new double;
矩阵是这样初始化的,有没有比这更酷的初始化方法:lol 你路见不平,拔刀相助,花掉你 62 思明论坛的买刀钱,热心值加 3 !
下次努力哦!……用位移不是更好吗?、。 我的C++都还给老师啦`:sad 你在马路边,捡到了一分钱,找不到警察叔叔就把它放到了你的口袋里边!
下次努力哦!……原帖由 众香之主 于 2007-4-29 18:38 发表
用位移不是更好吗?、。
本来就是位移啊,但是你要有个算法,让无论什么情况下都能转换带状矩阵,并且你要找到那个带宽的规律,不能乱给空间:lol
double** bda = new double*;//在堆中分配了n行,行数要和A一样
for(int i=0;i<n;i++) //为行分配空间
{
bda = new double; //每行需分配p+r+1的空间,这里的p是左带宽,r是右带宽
bda += p; //每行偏移
}
for(int i=0;i<n;i++)
{
int ip =max(i-p,0); //max()和min()函数在<algorithm>里,不想用的话也可以自己写
int ir =min(i+r,n-1);
for(int j =ip;j<=ir;j++) //确保赋的值都在A的主对角线和3条次对角线中
bda=A;
}
for(int i=0;i<n;i++)
{
bda -=p;
delete[] bda; //释放每行
}
delete[] bda; //释放双重指针
[ 本帖最后由 zkkpkk 于 2007-4-30 10:23 编辑 ] 原来版主是以前的劳动委员:titter
页:
[1]