| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1461 人关注过本帖
标题:[求助]程序员考试做复杂填空题的方法?!
取消只看楼主 加入收藏
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
结帖率:83.33%
收藏
 问题点数:0 回复次数:5 
[求助]程序员考试做复杂填空题的方法?!



这是程序员考试的试题
在做这样一个比较复杂的填空题 什么思路来做这个题 从那里入手呢?
我需要做这种题快速明确的方法 思想 和过程 ,不需要答案

谢谢各位高手



若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。对于m行
n列的稀疏矩阵M,进行转置运算后得到n行m列的矩阵MT,如图3-1所示。


0 -3 0 0 5

0 0 0 10 0

M 4×5= 12 0 0 0 0

0 14 0 0 -7


0 0 12 0
-3 0 0 14
MT 5×4= 0 0 0 0
0 10 0 0
5 0 0 -7

图3-1 稀疏矩阵M及其转置矩阵MT

为了压缩稀疏矩阵的存储空间,用三元组(即元素所在的行号、列号和元素值)表
示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零元素(也
称为三元组顺序表)。例如,图3-1所示的矩阵M相应的三元组顺序表如表3-1所示,
其转置矩阵MT的三元组顺序表如表3-2所示。
表3-1 表3-2
矩阵M M 的转置矩阵MT
行号 列号 元素值 行号 列号 元素值
0 1 -3 0 2 12

0 4 5 1 0 -3

1 3 10 1 3 14

2 0 12 3 1 10

3 1 14 4 0 5

3 4 -7 4 3 -7


函数TransposeMatrix(Matrix M)的功能是对用三元组顺序表表示的稀疏矩阵M进
行转置运算。
对M实施转置运算时,为了将M中的每个非零元素直接存入其转置矩阵MT三元组
顺序表的相应位置,需先计算M中每一列非零元素的数目(即MT中每一行非零元素的
数目),并记录在向量num中;然后根据以下关系,计算出矩阵M中每列的第一个非零
元素在转置矩阵MT三元组顺序表中的位置:
cpot[0] = 0
cpot[j] = cpot[j-1] + num[j-1] /* j为列号 */
类型ElemType、Triple和Matrix定义如下:
typedef int ElemType;
typedef struct { /* 三元组类型 */
int r,c; /* 矩阵元素的行号、列号 */
ElemType e; /* 矩阵元素的值*/
}Triple;
typedef struct { /* 矩阵的三元组顺序表存储结构 */
int rows,cols,elements; /* 矩阵的行数、列数和非零元素数目 */
Triple data[MAXSIZE];
}Matrix;


【C函数】

int TransposeMatrix(Matrix M)
{
int j,q,t;
int *num, *cpot;
Matrix MT; /* MT是M的转置矩阵 */
num = (int *)malloc(M.cols*sizeof(int));
cpot = (int *)malloc(M.cols*sizeof(int));
if (!num || !cpot)
return ERROR;
/* 设置转置矩阵MT行数、列数和非零元数目 */
MT.rows = __________ (1);
MT.cols = ________ (2) ;
MT.elements = M.elements;
if (M.elements > 0)
{
for(q = 0; q < M.cols; q++)
num[q] = 0;

for(t = 0; t < M.elements; ++t) /* 计算矩阵M中每一列非零元素数目 */
num[M.data[t].c]++;

/* 计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置 */
___________(3) ;
for(j = 1;j < M.cols; j++)
cpot[j] = ________ (4) ;

/* 以下代码完成转置矩阵MT三元组顺序表元素的设置 */
for(t = 0; t < M.elements;t++)
{
j = __________ (5) ; /* 取矩阵M的一个非零元素的列号存入j */
q = cpot[j]; /* q为该非零元素在转置矩阵MT三元组顺序表中的位置(下标)*/
MT.data[q].r = M.data[t].c;
MT.data[q].c = M.data[t].r;
MT.data[q].e = M.data[t].e;
++cpot[j]; /* 计算M中第j列的下一个非零元素的目的位置 */
}/* for */

}/* if */
free(num); free(cpot);

/*此处输出矩阵元素,代码省略*/

return OK;
}/* TransposeMatrix */

搜索更多相关主题的帖子: 程序员考试 填空 
2007-10-21 22:56
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
顶一个!

羊肉串 葡萄干 哈密瓜!!
2007-10-22 00:34
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
........不发表任何意见  

羊肉串 葡萄干 哈密瓜!!
2007-10-22 12:49
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
以下是引用nuciewth在2007-10-22 14:15:24的发言:
mp3aaa 你该不会在耍我的吧.

......我要的是做这种题的 方法 不是要的答案 注意 是这种

我现在看见这种题就晕 不知道从那里入手 本来我看懂别人写的程序就比较困难 原来都是借助CFREE来看,考试的时候又不能上机 ,要看懂这种不全的程序更困难 ,关键是 时间耽误不起啊。。。。。。。。。。。时间。。。。。。。


羊肉串 葡萄干 哈密瓜!!
2007-10-23 17:51
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
说实话 我还是不明白他们的算法 要是我写根本写不了怎么长。。。。。
这些出题的人 真恶心 ,估计上万大学找不到工作 然后去出题

羊肉串 葡萄干 哈密瓜!!
2007-10-23 17:56
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
这个题算是简单的了

已开始 (1) (2) 都是送分的 (3) (4)的代码给了 (5) 看看局部的地方 也能写出来 基本不用看整体的算法 但是! 不是每个题都怎么简单的。。
我时间不多了 我为了考试 学编程放弃了很多了。。。

[此贴子已经被作者于2007-10-23 18:06:16编辑过]


羊肉串 葡萄干 哈密瓜!!
2007-10-23 18:02
快速回复:[求助]程序员考试做复杂填空题的方法?!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026051 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved