zkkpkk 发表于 2007-4-28 21:55:17

一道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元素填充

我已经知道怎么做了,想看看大伙的算法

5572667 发表于 2007-4-28 22:06:58

数学=头晕````````

下落不明 发表于 2007-4-28 22:19:26

你参加了我们组织的狩猎,获得了 394 思明论坛的猎物兑现金!

   下次努力哦!……呃....
C++没学好....

dv-Partner 发表于 2007-4-28 22:28:25

:sad   C++偶也没学好。。。。。。。。。。。。!

:handshake

zkkpkk 发表于 2007-4-28 22:32:48

你在街头拐角捡到一条珍珠项链,交还了失主,失主送给你 444 思明论坛的酬金!热心值加 3 !

   下次努力哦!……我的输出乱了一点

                double** fm = new double*;
        for(i=0;i<5;i++)
                fm = new double;

矩阵是这样初始化的,有没有比这更酷的初始化方法:lol

众香之主 发表于 2007-4-29 18:38:20

你路见不平,拔刀相助,花掉你 62 思明论坛的买刀钱,热心值加 3 !

   下次努力哦!……用位移不是更好吗?、。

黑色幽默 发表于 2007-4-29 18:39:32

我的C++都还给老师啦`:sad

zkkpkk 发表于 2007-4-29 23:23:48

你在马路边,捡到了一分钱,找不到警察叔叔就把它放到了你的口袋里边!

   下次努力哦!……原帖由 众香之主 于 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 编辑 ]

zkkpkk 发表于 2007-4-30 10:52:53

原来版主是以前的劳动委员:titter
页: [1]
查看完整版本: 一道C++数值计算题