矩阵问题(二维数组)-基础题70th + 发牌(二维数组)-基础题71th + 数字金字塔(二维数组)-基础题72th

矩阵问题

属于二维数组的内容

题目

  • 问题描述
    从键盘上输入一个整数N,按以下规律输出一个(2N+1)*(2N+1)的矩阵:

对角线的值为1,

上半三角区域值为2,

下半三角区域值为3,

左半三角区域的值为4,

右半三角区域的值为5。

  • 输入说明
    你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组测试数据数据占一行,大于零,小于等于8。

  • 输出说明
    对每组测试数据,你的程序需要向标准输出文件(通常为启动该程序的终端)依次输出符合要求的矩阵,每行数据与数据之间以空格分隔,在行首和行尾不要输出多余的空格。在所有数据前后,以及两组数据之间不要输出多余的空行。

  • 输入范例

    1
    8

  • 输出范例

    1 2 1
    4 1 5
    1 3 1
    1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
    4 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 5
    4 4 1 2 2 2 2 2 2 2 2 2 2 2 1 5 5
    4 4 4 1 2 2 2 2 2 2 2 2 2 1 5 5 5
    4 4 4 4 1 2 2 2 2 2 2 2 1 5 5 5 5
    4 4 4 4 4 1 2 2 2 2 2 1 5 5 5 5 5
    4 4 4 4 4 4 1 2 2 2 1 5 5 5 5 5 5
    4 4 4 4 4 4 4 1 2 1 5 5 5 5 5 5 5
    4 4 4 4 4 4 4 4 1 5 5 5 5 5 5 5 5
    4 4 4 4 4 4 4 1 3 1 5 5 5 5 5 5 5
    4 4 4 4 4 4 1 3 3 3 1 5 5 5 5 5 5
    4 4 4 4 4 1 3 3 3 3 3 1 5 5 5 5 5
    4 4 4 4 1 3 3 3 3 3 3 3 1 5 5 5 5
    4 4 4 1 3 3 3 3 3 3 3 3 3 1 5 5 5
    4 4 1 3 3 3 3 3 3 3 3 3 3 3 1 5 5
    4 1 3 3 3 3 3 3 3 3 3 3 3 3 3 1 5
    1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1

解题思路

  • 这道题的解题思路主要在于通过二维数组构造一个边长为 2𝑅+1的方阵,并根据每个位置与两条对角线之间的关系进行分类赋值。程序中通过判断 i = = j 和 i + j = = 2*R 来确定主对角线和副对角线位置,并将这些位置赋值为 1;其余位置则根据当前坐标在两条对角线划分出的不同区域进行判断,例如通过比较 i 与 j 的大小关系,以及 i + j 与 2R 的大小关系,将整个矩阵划分为四个区域,并分别赋值为 2、3、4、5。

整体代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int R;
	while(cin>>R){	
		vector<vector<int> > a(2*R+1,vector<int>(2*R+1));
		for(int i=0;i<2*R+1;i++){
			for(int j=0;j<2*R+1;j++){
				if(i==j||i+j==2*R){
					a[i][j]=1;
				}else if(i<j&&i+j<2*R){
					a[i][j]=2;
				}else if(i>j&&i+j>2*R){
					a[i][j]=3;
				}else if(i>j&&i+j<2*R){
					a[i][j]=4;
				}else if(i<j&&i+j>2*R){
					a[i][j]=5;
				}
			}
		}
		for(int i=0;i<2*R+1;i++){
			if(i>0){
				cout<<endl;
			}
			for(int j=0;j<2*R+1;j++){
				if(j>0){
					cout<<" ";
				}
				cout<<a[i][j];
			}
		}
		cout<<endl;
	}
	return 0;
}

注意事项

  • 注意输出格式。

发牌

属于二维数组的内容

题目

  • 问题描述
    编制一个模拟发牌的程序。有编号为1,2,3,4四个人,将一付去掉大小怪的扑克按照如下顺序排列梅花c0-c12,方块d0-d12,红桃h0--h12,黑桃s0-s12,然后按照1,2,3,4四个人的顺序发牌,问最后每个人手上的牌有哪些。

  • 输入说明
    你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成。每组数据包含一个在1到4之间的整数,代表四个人中的一个,在行首和行尾没有多余的空格。

  • 输出说明
    对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。对于每组输入,输出那个人手上的牌。每组一行。每行包括13张牌,每张牌由牌的花色和牌的大小组成。牌的花色和牌的大小之间有一个空格,前后两张牌之间也有一个空格。其余数据前后没有多余的空格,两组数据之间也没有多余的空行。

  • 输入范例

    1
    2

  • 输出范例

    c 0 c 4 c 8 c 12 d 3 d 7 d 11 h 2 h 6 h 10 s 1 s 5 s 9
    c 1 c 5 c 9 d 0 d 4 d 8 d 12 h 3 h 7 h 11 s 2 s 6 s 10

解题思路

  • 这道题的解题思路主要在于先按题目要求构造整副扑克牌的顺序,即依次生成 c0--c12、d0--d12、h0--h12、s0--s12,共 52 张牌,并按顺序存入一维数组中。由于发牌是按 1、2、3、4 循环发放,因此第 i 张牌(下标从 0 开始)会发给编号为 (i % 4) + 1 的人。这样只需要在发牌时根据输入的编号,筛选出所有满足 (i % 4) + 1 == k 的牌即可,这些牌就是该编号的人最终拿到的 13 张牌。

整体代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	vector<char> suit;
    vector<int> num;
	char suits[4]={'c','d','h','s'};
	for(int i=0;i<4;i++){
		for(int j=0;j<13;j++){
			suit.push_back(suits[i]);
            num.push_back(j);
		}
	}
	int k;
	while(cin>>k){
		bool first=true;
		for(int i=0;i<52;i++){
			if((i%4)+1==k){
				if(!first){
				cout<<" ";
				}
				cout << suit[i] << " " << num[i];
				first=false;
			}
		}
		cout<<endl;
	}
	return 0;
} 

注意事项

  • 注意输出的格式。

数字金字塔

属于二维数组的内容

题目

  • 问题描述
    考虑在下面被显示的数字金字塔(第n行有n列)。写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大。每前进一步可以走到它的正下方或者右下方(往下一行、往右一列)的位置。
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大和:30

  • 输入说明
    第一个行包含 R(1<= R<=1000) ,表示行的数目。后面每行为这个数字金字塔特定行包含的整数。所有的被供应的整数是非负的且不大于100。

  • 输出说明
    输出仅一行,包含那个可能得到的最大的和。

  • 输入范例

    6
    7
    3 8
    8 1 0
    2 7 4 100
    4 5 2 6 5
    3 2 5 8 7 6

  • 输出范例

    129

解题思路

  • 这道题的解题思路主要在于利用动态规划自底向上求最大路径和。由于从某个位置只能走到下一行的正下方或右下方,因此当前位置能够得到的最大路径和,等于当前位置的数值加上下一行两个可选位置中的较大值。程序中先将整个数字金字塔读入二维数组,然后从倒数第二行开始向上遍历,对每个位置执行 a[i][j] += max(a[i+1][j], a[i+1][j+1]),不断将"从该位置出发到底部的最大路径和"更新到当前数组中。
  • 这样逐层向上更新后,最顶端 a[0][0] 中保存的就是从顶部到底部的最大路径和。整体思路就是把原问题拆分成子问题,通过自底向上的递推逐步合并结果,最终得到全局最优解。

整体代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int R;
	cin>>R;
	vector<vector<int> > a(R);
	for(int i=0;i<R;i++){
		a[i].resize(i+1);
		for(int j=0;j<a[i].size();j++){
			cin>>a[i][j];
		}
	}
	for(int i=R-2;i>=0;i--){
		for(int j=0;j<=i;j++){
			a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
		}
	}
	cout<<a[0][0]<<endl;
	return 0;
}

注意事项

  • 注意写计算式时不要忘了省略时等号前面的运算符。

英文段落翻译

自己翻译

2.供应链管理

供应链管理是一个被公司用来确保他们的供应链是有效的并且高效的步骤。一个物联网系统能够协助供应链管理。他的思路是管理在产品生产,递送还有最终的顾客要求的服务方面一整个有关商业或者合作方的网络。在任何给出的时间,劳动力市场能够从在一个供应链中的供应者,物流服务提供者,本地服务还有顾客以及任何数量的指定的参与者上要求改变。这些变化在供应链基础设施上有着巨大的影响,范围从在商业合作伙伴之间的建立电子沟通的基础层到流程的更复杂的配置和对于一个快商品流程非常重要的劳动力筹备。

3.智能电网和智能建筑

一个智能电网的促进是物联网的一个至关重要的应用。在美国的许多电力公司已经或者正在提升他们的电力管理和分发系统的流程。在个体家中的智能传感器(智能恒温器)能收集信息并通过一个网络发送到主要的站点(很可能甚至是当地的集线器),这能够应用更复杂的电力管理,并且控制信号回发给电网来节省能源。通过应用传感测量和控制设备在电力生产,传输,分发和消耗上,智能电网已经变得可能。

物联网已经被建议在住宅,商业,工业和政府配置的智能建筑的结构中了。一个智能建筑可以是一个购物商场或者一个家,一个医院以及一个高层的办公大楼。智能建筑需要监管和加热空调,灯光和环境改变的规范。他们可以监管建筑的安全,火灾阻止以及电梯运作。智能建筑技术集中对建筑在带来更多细节的监控和感知清醒。

AI翻译

2 . 供应链管理

供应链管理是企业用于确保其供应链高效且成本可控的一套流程。物联网系统可为供应链管理提供助力。其核心理念在于,根据终端客户的需求,对整个由相关企业或合作伙伴构成的网络进行管理------这些参与者涉及产品制造、交付以及服务等各个环节。在任何特定时刻,市场力量都可能要求供应链中的供应商、物流服务商、地点、客户以及众多专业参与者做出相应调整。这种动态变化对供应链基础设施具有显著影响,其范围涵盖从贸易伙伴之间建立电子通信的基础层,到对确保快速生产过程至关重要的流程与工作流编排进行更复杂配置。

3 . 智能电网与智能建筑

物联网的一个关键应用在于推动智能电网的建设。美国各地多家电力公司已着手或正在对其电力管理与配电系统进行升级。安置在住宅中的各类传感器(如智能恒温器)可收集信息,通过网络发送至主站(甚至可能是本地"集线器"),主站通过应用复杂的电力管理逻辑,将控制信号发回电网,从而实现节能。智能电网的实现,有赖于将传感、测量与控制装置应用于电力生产、传输、配送及消费的各个环节。

物联网在住宅、商业、工业及政府等各类场景的智能建筑建设中亦被广泛提及。智能建筑可以是购物中心、住宅、医院,也可以是高层写字楼。智能建筑需要对供暖、空调、照明及环境变化进行监测与调节,同时还需负责楼宇安防、消防灭火及电梯运行等系统的监管。智能建筑技术的核心,在于为建筑赋予更精细化的监测与传感"感知力"。

单词打卡

下一篇

待续

相关推荐
系统修复专家1 小时前
UG12.0官方未公开修复方法:彻底解决C++异常崩溃问题
开发语言·c++·安全·bug·dll·游戏报错
芜湖xin2 小时前
【题解-Acwing】796. 子矩阵的和
算法·前缀和
shehuiyuelaiyuehao2 小时前
23七大排序算法
数据结构·算法·排序算法
Σίσυφος19002 小时前
E=[T]×R 的证明
算法
TracyCoder1232 小时前
LeetCode Hot100(49/100)——33. 搜索旋转排序数组
算法·leetcode
HAPPY酷2 小时前
温和 C++:构建一个线程安全的异步消息服务器
服务器·c++·安全
量子炒饭大师2 小时前
【C++入门】Cyber尖层的虚实重构—— 【类与对象】类型转换
开发语言·c++·重构·类型转换·隐式转换·explicit·类与对象
熬了夜的程序员2 小时前
【LeetCode】116. 填充每个节点的下一个右侧节点指针
算法·leetcode·职场和发展
郝学胜-神的一滴2 小时前
贝叶斯之美:从公式到朴素贝叶斯算法的实践之旅
人工智能·python·算法·机器学习·scikit-learn