2月11日打卡

一、矩阵问题

题目:

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

对角线的值为1,

上半三角区域值为2,

下半三角区域值为3,

左半三角区域的值为4,

右半三角区域的值为5。

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

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

个人总结:

这道题的核心算法思想是通过坐标关系进行区域划分,本质上是一道二维矩阵的"几何分区判断"问题,而不是数值计算问题。整个矩阵大小为 (2N+1)×(2N+1),实际上是以中心为对称点的一个正方形,通过主对角线 i == j 和副对角线 i + j == 2N 将矩阵划分成四个三角区域。题目的关键就在于如何用下标 i、j 的关系精确描述这些区域。

代码中采用的是"位置分类法":对于每一个位置 (i, j),根据它与两条对角线的相对位置关系决定输出值。首先判断是否在两条对角线上,只要满足 i == j 或 i + j == 2N 就赋值为 1,这一步必须放在最前面,因为对角线优先级最高。接下来根据 i 与 j 的大小关系(主对角线分界)以及 i + j 与 2N 的大小关系(副对角线分界)来确定落在哪一个三角区域。通过组合条件 i < j、i > j、i + j < 2N、i + j > 2N,把平面划分成四块区域,分别对应题目要求的 2、4、5、3。这实际上是一种利用"代数不等式刻画几何区域"的思想。

代码:

#include <stdio.h>

#include<math.h>

int main()

{

int N;

while (scanf_s("%d", &N) == 1)

{

for (int i = 0; i < 2 * N + 1; i++)

{

for (int j = 0; j < 2 * N + 1; j++)

{

int value;

if (i == j || i + j == 2 * N )

{

value = 1;

}

else if (i < j&&i + j < 2 * N)

{

value = 2;

}

else if (i>j&&i + j < 2 * N)

{

value = 4;

}

else if (i<j&&i + j>2 * N)

{

value = 5;

}

else if(i>j&&i + j > 2 * N)

{

value = 3;

}

if (j == 2 * N)

{

printf("%d", value);

}

else

{

printf("%d ", value);

}

}

printf("\n");

}

}

return 0;

}

二、发牌

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

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

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

个人总结:

这道题本质上是一个顺序模拟问题,核心算法思想是按照题目给定的固定顺序构造整副牌,然后利用"轮流分配(取模分配)"的方法模拟发牌过程。整副牌的生成顺序已经明确:先梅花 c0--c12,再方块 d0--d12,再红桃 h0--h12,最后黑桃 s0--s12,总共 52 张牌。代码通过两层循环按花色和点数依次生成牌,并用一个递增的 index 表示当前是第几张牌,从而保持整体顺序。

发牌过程采用的是典型的"循环分配"思想。因为四个人按 1、2、3、4 的顺序轮流拿牌,所以只需要对当前牌的序号 index 进行取模运算 index % 4,就可以确定这张牌属于哪一个人。这是一种非常经典的均匀分配方法,相当于把一个线性序列按周期 4 进行分组。这样不需要真正模拟"发一张、换一个人"的过程,而是用数学规律直接确定归属,提高了逻辑清晰度。

程序使用二维数组 playerSuit 和 playerNum 分别保存每个玩家的花色和点数,并用 cnt 数组记录每个玩家已经拿到多少张牌,用来确定存放位置。由于总牌数 52 能被 4 整除,因此每人最终正好得到 13 张牌,数组大小也刚好匹配。

三、数字金字塔

题目:

考虑在下面被显示的数字金字塔(第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。

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

个人总结:

这道题本质上是一个典型的动态规划路径最优问题,属于"数字三角形最大路径和"的经典模型。题目要求从顶点出发,每一步只能走到下一行的正下方或右下方位置,最终在底层任意位置结束,并使路径和最大。由于每个位置的最优结果依赖于上一行相邻位置的结果,因此它天然具有"最优子结构"性质,适合用动态规划解决。

代码采用的是自顶向下的一维滚动数组动态规划思想。设 dp[j] 表示当前行第 j 列位置的最大路径和。对于第 i 行第 j 列的数字 x,其状态转移来源于上一行的两个可能位置:正上方 dp[j] 和左上方 dp[j-1]。因此递推关系为:

dp[j] = max(dp[j], dp[j-1]) + x

其中 dp[j] 表示从上方走下来,dp[j-1] 表示从左上方走下来。

为了避免覆盖尚未使用的旧数据,代码在每一行内部采用从右往左更新(j 从 i 递减到 0)。这是本题的关键技巧。如果从左往右更新,会导致 dp[j-1] 已经被当前行更新,破坏状态转移的正确性。倒序更新保证 dp[j] 和 dp[j-1] 在使用时仍然是上一行的值。

边界情况需要单独处理:当 j == 0 时,只能从正上方下来;当 j == i 时,只能从左上方下来。这对应三角形左右两边只有一条路径可达。

代码:

#include <stdio.h>

int max(int a, int b) {

return a > b ? a : b;

}

int main() {

int R;

scanf("%d", &R);

int dp[1000] = {0};

for (int i = 0; i < R; i++) {

for (int j = i; j >= 0; j--) {

int x;

scanf("%d", &x);

if (j == 0) {

dp[j] = dp[j] + x;

} else if (j == i) {

dp[j] = dp[j - 1] + x;

} else {

dp[j] = max(dp[j], dp[j - 1]) + x;

}

}

}

int ans = dp[0];

for (int i = 1; i < R; i++) {

if (dp[i] > ans)

ans = dp[i];

}

printf("%d\n", ans);

return 0;

}

四、英语翻译

1.As an emerging technology, the loT will become more maturemore sophisticated. Figure 12C-1 shows the majorandtechnology advances and key applications that may benefit fromthe loT. For example, supply chains are now better supported than before. Vertical market applications may represent the nextwave of advances. Ubiquitous positioning is expected to becomea reality as we move toward 2020. Beyond that, a physical loTmay be in place in a global scale. These advances willsignificantly upgrade human abilities, societaloutcomes,national productivity, and quality of life.

作为一项新兴技术,物联网将变得更加成熟和复杂。图 12C-1 展示了可能从物联网中受益的主要技术进步和关键应用。例如,如今供应链比以往得到了更好的支持。垂直行业市场应用可能代表着下一波技术进步。随着时间推移到 2020 年前后,泛在定位有望成为现实。更进一步,在全球范围内部署实体物联网也将成为可能。这些进步将显著提升人类能力、社会发展成果、国家生产力以及生活质量。

2.The loT system is likely to have an event-driven architecture. InFigure 12C-2, loT development is shown with a three-layerarchitecture. The top layer is formed by driven applicationsThe application space of the loT is huge. The bottom layersrepresent various types of sensing devices: namely RFID tags,ZigBee or other types of sensors, and road-mapping GPSnavigatorsThe sensing devices are locally or wide-area-connected in the form of RFID networks, sensor networks, andGPSs. Signals or information collected at these sensing devicesare linked to the applications through the cloud computingplatforms at the middle layer.

物联网系统很可能采用事件驱动的体系结构。在图 12C-2 中,物联网的发展被描述为一种三层架构。最上层由各种驱动型应用构成,物联网的应用空间极为广阔。最底层是各种类型的感知设备,包括 RFID 标签、ZigBee 或其他类型的传感器,以及用于路径导航的 GPS 设备。这些感知设备通过 RFID 网络、传感器网络和 GPS 系统在本地或广域范围内互联。感知设备收集到的信号或信息通过中间层的云计算平台与上层应用相连接。

3.The signal processing clouds are built over the mobile networks,the Internet backbone, and various information networks at themiddle layer. In the loT, the meaning of a sensing event does notfollow a deterministic or syntactic model . In fact, the service-oriented architecture (SOA) model is adoptable here. A largenumber of sensors and filters are used to collect the raw data.

中间层的信号处理云平台建立在移动通信网络、互联网骨干网以及各种信息网络之上。在物联网中,感知事件的意义并不遵循确定性或纯语法模型。实际上,可以采用面向服务架构(SOA)模型来实现系统设计。系统中使用大量传感器和过滤器来采集原始数据。

五、单词打卡

相关推荐
寻寻觅觅☆8 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
偷吃的耗子8 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
化学在逃硬闯CS9 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar1239 小时前
C++使用format
开发语言·c++·算法
Gofarlic_OMS10 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
夏鹏今天学习了吗10 小时前
【LeetCode热题100(100/100)】数据流的中位数
算法·leetcode·职场和发展
忙什么果11 小时前
上位机、下位机、FPGA、算法放在哪层合适?
算法·fpga开发
董董灿是个攻城狮11 小时前
AI 视觉连载4:YUV 的图像表示
算法
ArturiaZ12 小时前
【day24】
c++·算法·图论
大江东去浪淘尽千古风流人物12 小时前
【SLAM】Hydra-Foundations 层次化空间感知:机器人如何像人类一样理解3D环境
深度学习·算法·3d·机器人·概率论·slam