2026.2.13——OJ75-77题

T75:魔方阵------二维数组

代码实现:

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

int n;

bool first=true;

while(cin>>n){

if(!first){

cout<<endl;

}

first=false;

//创建n阶魔方阵

int magic[19][19]={0};

//规则1:将"1"放在第一行中间

int row=0;//行

int col=n/2;//列

//放数

magic[row][col]=1;

//规则2:从2开始填充到n*n

//先按规则2尝试移动到右上角(row-1,col+1)然后看是否越界,再按规则3和4调整

for(int num=2;num<=n*n;num++){

int nextrow=row-1;//下一行

int nextcol=col+1;//下一列

//规则3:如果向上移动超过顶部,则回到底部

if(nextrow<0){

nextrow=n-1;//最后一行,索引为n-1

}

//规则4:如果向右移动超过右侧,则回到左侧

if(nextcol>=n){

nextcol=0;//第一列,索引为0

}

//规则5:如果目标位置已有数,或者上一个数是第一行第n列

if(magic[nextrow][nextcol]!=0||(row==0&&col==n-1)){

//放在上一个数的下面

nextrow=row+1;

nextcol=col;

}

//放数

row=nextrow;

col=nextcol;

magic[row][col]=num;

}

//输出魔方阵

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

for(int j=0;j<n;j++){

if(j>0) cout<<" ";

cout<<magic[i][j];

}

cout<<endl;//输出一行之后换行

}

}

return 0;

}

个人思考:

这道题稍微有些复杂,主要是怎么理解这几个规则的关系,首先需要将1放在第一行的中间列,然后按照尝试将下一个数放在放在当前数的右上方,接着判断是否会越界,根据规则3和4进行调整,如果计算出的位置被展通,或者上一个数位于第一行最后一列则按照规则5。然后将当前数字放在确定的位置并更新row和col为新的位置。

T76:最大效益------二维数组

代码实现:

//next_permutation 是一个强大的工具,适用于需要枚举所有排列的问题。在最大效益问题中,它完美地枚举了所有可能的职员-客户匹配方案,使得代码简洁高效。

#include <iostream>

#include <algorithm>

using namespace std;

int main(){

int a[5][5];

while(true){

//读取5*5的效益表

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

for(int j=0;j<5;j++){

if(!(cin>>a[i][j])){

return 0;

}

}

}

int maxsum =0;

int s[5]={0,1,2,3,4};//客户编号的排列

//枚举所有排列,计算最大效益

do{

int sum=0;

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

sum+=a[i][s[i]];//第i名职员匹配第s[i]个客户

}

if(sum>maxsum){

maxsum=sum;

}

}while(next_permutation(s,s+5));

cout<<maxsum<<endl;

}

return 0;

}

个人思考:

这道题利用了一个next_permutation函数可以生成所有可能的排列,这一点可以让整个程序变得很简洁,先通过二维数组把数据读入,然后枚举所有排列,为5名职员各分配一个不同的客户,五个数一共120种排列,遍历每种排列下效益的值,如果大于已经记录的值就更新。

T77:螺旋方阵------二维数组

代码实现:

#include <iostream>

using namespace std;

void function(int n){

int arr[11][11]={0};//n最大为10,所以用开11*11的数组

//定义边界和起始值

int top=0,bottom=n-1,left=0,right=n-1;

int num=1;

while(top<=bottom&&left<=right){

//从左到右填充顶部行

for(int i=left;i<=right;i++){

arr[top][i]=num++;

}

top++;

//从上到下填充右侧列

for(int i=top;i<=bottom;i++){

arr[i][right]=num++;

}

right--;

//先检查是否还有行需要填充

if(top<=bottom){

//从右到左填充底部行

for(int i=right;i>=left;i--){

arr[bottom][i]=num++;

}

bottom--;

}

//先检查是否还有列需要填充

if(left<=right){

//从下到上填充左侧列

for(int i=bottom;i>=top;i--){

arr[i][left]=num++;

}

left++;

}

}

//输出螺旋方阵

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

for(int j=0;j<n;j++){

if(j>0) cout<<" ";

cout<<arr[i][j];

}

cout<<endl;

}

}

int main(){

int n;

bool first=true;

while(cin>>n){

if(!first){

cout<<endl;

}

first=false;

function(n);

}

return 0;

}

个人思考:

这道题需要搞清题目的意思,然后考虑好边界情况,从左到右和从上到下都是正常的更新就可以,从右到左和从下到上需要考虑是否还有行和列,然后构造完成之后就可以正常的输出了。

英语翻译:

P51:3.智能电网与智能建筑

物联网的一个关键应用是推动智能电网的发展。美国各地的多家电力公司已经或正在升级其电力管理与配电系统。家庭中的各类传感器(如智能恒温器)可以收集信息,并通过网络发送至主站(甚至可能是本地"集线器"),这些主站能够实施复杂的电力管理,并向电网发送控制信号以节约能源。智能电网的实现,依赖于在电力生产、传输、配电和消费环节应用传感、测量与控制设备。

grid:电网;网格

thermostats:恒温器;温控器

station:站;站点

sense:传感;感知

measurement:测量;计量

distribution:配电;分配

consumption:消费;消耗

P52:物联网技术已被应用于住宅、商业、工业及政府场景下的智能建筑建设。一座智能建筑可以是购物中心、住宅、医院或高层办公楼。智能建筑需要对供暖、空调、照明及环境变化进行监测与调控,同时也能管控建筑安保、消防灭火及电梯运行等系统。智能建筑技术的核心,是为建筑带来更精细的监测与传感"感知能力"。

be suggested in:被应用于;被提议用于

residential:住宅的;居住的

high-rise office tower:高层办公楼

monitor:监测;监控

regulation:调控;调节

oversee:管控;监督

suppression:抑制;灭火

P53:那么,我们再回到现代计算机的切换能力上来:20世纪70年代的计算机通常一次能够处理8个开关。也就是说,在每个周期内,它们可以处理8个二进制数字,也就是8个比特。由8个比特组成的一组数据被称为一个字节,每个字节包含256种可能的"开/关"组合(即1或0的组合)。每种组合都等价于一条指令、指令的一部分,或是某种特定类型的数据,例如一个数字、一个字符或一个图形符号。例如,模式11010010可能是二进制数据------在本例中,它代表十进制210;也可能是一条指令,告知计算机将存储在其内部开关(寄存器)中的数据,与存储在某个存储芯片位置的数据进行比较。

binary digits:二进制数字

bits:比特

equivalent:等价物;等同于

datum:数据(单数)

graphics:图形;图像

decimal:十进制的;十进制数

switches:开关;寄存器

memory-chip:存储芯片

背单词:

相关推荐
重生之后端学习2 小时前
230. 二叉搜索树中第 K 小的元素
java·数据结构·算法·深度优先
近津薪荼2 小时前
dfs专题7—— 全排列
c++·学习·算法·深度优先
你的冰西瓜2 小时前
C++ STL算法——非修改序列算法
开发语言·c++·算法·stl
闻缺陷则喜何志丹2 小时前
P12275 [蓝桥杯 2024 国 Python B] 工厂|普及+
c++·算法·蓝桥杯·洛谷
宝贝儿好2 小时前
【强化学习】第九章:基于Action-Critic框架的强化学习
人工智能·python·深度学习·算法·动态规划
laplace01232 小时前
KL 散度1
人工智能·算法·agent·qwen
星火开发设计2 小时前
类模板:实现通用数据结构的基础
java·开发语言·数据结构·c++·html·知识
寻寻觅觅☆2 小时前
东华OJ-基础题-122-循环数(C++)-难度难
开发语言·c++
白中白121382 小时前
算法题-14
数据结构·算法·leetcode