作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

矩阵乘法的运算量与矩阵乘法的顺序强相关。
例如:

A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵

计算A*B*C有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。

编写程序计算不同的计算顺序需要进行的乘法次数。

本题含有多组样例输入!

输入描述:

输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则
计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!

输出描述:

输出需要进行的乘法次数

示例:

输入:

3
50 10
10 20
20 5
(A(BC))

输出:

3500

解题思路:

本题我用二维数组做的,采用了指针方式,用vector也很方便。Estimate函数用来计算两个矩阵的计算量,并返回相乘后的矩阵;calc函数用来将vector中后面的两个矩阵拿出来计算,再将新生成的矩阵塞进去,以此实现矩阵的连续操作;solve函数是主要求解函数,遍历字符串,将出现的矩阵字母以此塞进vector中,每出现一次')',就进行一个calc计算,这样实现了括号的优先级,若最后遍历完字符串,vector尺寸大于1,类似A(BC)=AD这样的,那就继续执行calc。完毕。

其实题目描述的不是特别严谨,假设括号并不是最小囊括两个,比如((ABC)D),按照我所写的算法逻辑,就会先算BC=E,再算ED=F,再算AF,但实际上应该是ABC=G,再算GD。总的来说,根据不同的题目要求,代码应该有所变通和完善,当前的测试样例不涵盖此类情况,如果未来有不通的案例,可以评论私我~

测试代码:

#include <iostream>
#include <string>
#include <vector>
using namespace std;int* Estimate(int *t1,int *t2,int &sum)
{int t1_row=t1[0];int t1_col=t1[1];int t2_row=t2[0];int t2_col=t2[1];sum=t1_row*t1_col*t2_col;int *t3=new int[2];t3[0]=t1_row;t3[1]=t2_col;return t3;
}int calc(vector<int*> &m)
{int *t1;int *t2;int *t3;int sum=0;t2=m.back();m.pop_back();t1=m.back();m.pop_back();t3=Estimate(t1,t2,sum);m.push_back(t3);return sum;
}int solve(int *a[2],string str)
{vector<int*> m;int sum=0;int k=0;for(int i=0;i<str.size();++i){// 若有')',则对前面的两个矩阵进行了一次计算量估算if(str[i]==')'){sum+=calc(m);}else if(str[i]>='A'&&str[i]<='Z'){m.push_back(a[k]);k++;}// 如果是'(',跳过}while(m.size()>1){sum+=calc(m);}return sum;
}int main()
{int number;while(cin>>number){int**mat=new int*[number];for(int i=0;i<number;++i){mat[i]=new int[2];cin>>mat[i][0];cin>>mat[i][1];}string str;cin>>str;cout<<solve(mat,str)<<endl;delete[] mat;}return 0;
}

华为机试HJ70:矩阵乘法计算量估算相关推荐

  1. HJ70 矩阵乘法计算量估算 ——

    一.题目 二.代码 import java.util.*; public class Main {public static void main(String[] args) {Scanner in ...

  2. 华为机试 - 最大矩阵和

    目录 题目描述 输入描述 输出描述 用例 题目分析 算法实现 题目描述 给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和最大子矩阵,子矩阵 ...

  3. 【华为机试】火星文计算

    题目描述: 已知火星人使用的运算符为#.$,其与地球人的等价公式如下: x#y = 2x+3y+4 x$y = 3*x+y+2 其中x.y是无符号整数 地球人公式按C语言规则计算 火星人公式中,$的优 ...

  4. 牛客在线编程-华为机试-中等

    牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...

  5. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  6. 【华为机试 Python实现】华为机试题集合(已更新171篇)

    文章目录 新手指引 数据结构基础 华为机试真题系列 牛客网华为机试系列 Python 八股文系列 <华为机试真题详解>专栏定价99.9 包含 <华为机试真题>的所有题目. 包含 ...

  7. 【HUAWEI】华为机试试题-105

    LeeCode试题链接直接上 HJ1 字符串最后一个单词的长度 HJ2 计算某字符出现次数 HJ3 明明的随机数:随机数去重排序输出(小-大) HJ4 字符串分隔:输入一个字符串,请按长度为8拆分每个 ...

  8. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  9. 华为机试训练做题总结(三)

    54. 挑7 题目描述 : 输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37-70,71,72,73-)的个数 思路分析: 这个问题有一个很好的解决办法就是将数字转为字符型,然 ...

  10. 牛客网华为机试(持续更新ing)

    坐标移动 string str; string sub=str.substr(0,n);//取得str的子串,从0坐标开始总计n个字符 sub=str.substr(index);//取得子串,从in ...

最新文章

  1. 就业丨2018年国内就业薪资高的5大编程语言排行
  2. 木兰编程语言python_国产编程语言木兰换皮Python 中科院重罚当事人
  3. python rq asyncio_Python 的异步 IO:Asyncio 简介
  4. Elasticsearch数据备份与恢复(基于HDFS)
  5. 【哈理工实验二】HTML+CSS3 旋转齿轮特效
  6. access denied for_abm怎么样?ACCESS集团携8大国际品牌在进博会首秀,展示abmr 硬核实力!...
  7. 认清一个人,看这四点就够了
  8. angularjs中的单选框绑定数据注意事项
  9. [转] 基于C#的波形显示控件的实现
  10. CoffeeScript学习(3)—— 函数
  11. hdu 1061 Rightmost Digit解题报告
  12. java语言实现二维数组构造二叉树_剑指offer打卡5:二叉树的子结构
  13. 安装skimage库(ModuleNotFoundError: No module named 'skimage')
  14. impress.js学习总结
  15. armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别
  16. 中班音乐计算机反思,幼儿园音乐活动反思10篇
  17. iOS AVCaptureDevice介绍
  18. 量化投资学习——一份高频因子的研报综述
  19. InputNumber 数字输入框
  20. 分享个好用的在线翻译器拍照扫一扫方法

热门文章

  1. oracle 并置,Oracle Coherence中文教程二:安装Oracle Coherence
  2. 项目过程管理(八)延期和需求变更
  3. IMS+金蝶K3搭建简易版本供应商协同管理平台(SRM)
  4. 51单片机简易MP3程序驱动蜂鸣器播放
  5. Software Testing - UI自动化测试常用设计模式之原型(Java)
  6. 提升睡眠质量:程序猿工作伴侣(睡眠革命)
  7. [转]用python来开发webgame服务端(2)
  8. 为什么有的计算机没有ppt,电脑上没有ppt怎么办
  9. Ceph Cache tier配置
  10. Sovit3D三维可视化开发工具动画定义新功能