百度笔试题(矩阵相乘)
          
            时间:09-14 09:31 阅读:1514次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:刚刚做完百度的笔试题,真心觉得不难,但由于时间不够所以没能全部写完,表示遗憾,笔试的最后一道我已经忘了原题,大概的意思是先将一个矩阵转置成另一个矩阵,然后两个矩阵相乘,最后返回二维数组,其实很简单。
               
                        
          
            看代码:
#include <iostream>  
#include <vector>  
#include <assert.h>  
using namespace std;  
  
void print_log(int **arr,int row,int line)  
{  
    assert(arr);  
    for(int i=0; i<row; ++i)  
    {  
        for(int j=0; j<line; ++j)  
            cout<<arr[i][j]<<" ";  
        cout<<endl;  
    }  
    cout<<endl;  
}  
int** Fun(int value,int row,int line)  
{  
    int **arr=new int*[row];  
    //申请二维数组  
    for(int i=0; i<row; ++i)  
        arr[i]=new int[line];  
    //构造初始二维数组  
    for(int i=0; i<row; ++i)  
    {  
        for(int j=0; j<line; ++j)  
            arr[i][j]=value++;  
    }  
    //显示初始二维数组  
    print_log(arr,row,line);  
  
    int **parr=new int*[row];  
    for(int i=0; i<row; ++i)  
        parr[i]=new int[line];  
    //转化数组  
    for(int i=0; i<row; ++i)  
    {  
        int k=0;  
        for(int j=0; j<line; ++j)  
        {  
            parr[i][j]=arr[k++][i];  
        }  
    }  
    //转化后输出  
    print_log(parr,row,line);  
  
    int **result=new int*[row];  
    for(int i=0; i<row; ++i)  
        result[i]=new int[line];  
    vector<int> v;  
    int x=0;  
    //矩阵相乘  
    for(int i=0; i<row; ++i,x++)  
    {  
        int m=0;  
        int y=0;  
        //相乘的次数  
        for(int n=0; n<row; ++n)  
        {  
            //每一行和另一个数组的每一列相乘后保存在vector中  
            for(int j=0; j<line; ++j)  
            {  
                v.push_back(arr[i][j] * parr[j][m]);  
                //v[s]=arr[i][j] * parr[j][m];  
            }  
            m++;  
            int sum=0;  
            int size=v.size();  
            //计算出行列相乘的的结果  
            for(int k=0; k<size; ++k)  
                sum+=v[k];  
            //释放vector数组  
            for(int k=0; k<size; ++k)  
                v.pop_back();  
            //保存到最后需要返回的二维数组里  
            result[x][y++]=sum;  
        }  
    }  
    print_log(result,row,line);  
    //释放空间  
    for(int i=row-1; i >=0; --i)  
    {  
        delete arr[i];  
        delete parr[i];       
    }  
    delete []arr;  
    delete []parr;  
    return result;  
}  
#include "head.h"  
int main()  
{  
    int value=0;  
    int row=0;  
    int line=0;  
    cout<<"请输入 value:";  
    cin>>value;  
    cout<<"请输入 row:";  
    cin>>row;  
    cout<<"请输入 line:";  
    cin>>line;  
    Fun(value,row,line);  
    return 0;  
}  
