当前位置: 首页 > news >正文

平方矩阵问题

回字形二维数组

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
    int n;
    while(cin>>n,n){
        for(int i=0; i<n;i++){
            for(int j=0; j<n; j++){
                int up=i, down=n-i+1, left=j, right=n-j+1;
                cout<<min(min(up,down),min(left,right))<<' ';
                
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

在这个程序中,每个位置 ( 𝑖 , 𝑗 )需要填充一个数,该数的计算方式是取该位置到四条边的最短距离。
在这里插入图片描述

二维数组

#include <iostream>
using namespace std;
int a[100][100];
int main(){
    int n;
    while(cin>>n,n){
        for(int i=0; i<n; i++){
            //填充对角线
            a[i][j]==1;
            //填充上三角
            for(int j=i+1, k=2; j<n; j++, k++){
                //行不变列变
                a[i][j]=k;
            }
            //填充下三角
            for(int j=i+1, k=2; j<n; j++,k++){
                //行变列不变
                a[j][i]=k;
            }
        }
        
        //输出
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                cout<<a[i][j]<<endl;
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

上三角填充分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
//下三角填充分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2的 i + j 次方

#include <iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n, n){
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                int v=1;
                //2的n次方等于n个2相乘
                for(int k=0; k<i+j; k++){
                    v*=2;
                }
                cout<<v<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

蛇形矩阵

#include <iostream>
using namespace std;
int res[100][100];
int main(){
    int n,m;
    cin>>n>>m;
    //定义方向数组
    //控制行变动
    int dx[]={0,1,0,-1}
    //控制列变动
    int dy[]={1,0,-1,0};
    
    //x = 0, y = 0:起始位置在矩阵的左上角 (0,0)
    //d = 0:初始方向向右
    //k = 1:从 1 开始填充到 n*m,一共 n*m 次
    
    for(int x=0, y=0, d=0, k=1; k<=n*m; k++){
        
        res[x][y] = k;
        
        //计算当前方向的下一个坐标 (a, b)
        int a=x+dx[d] , b=y+dy[d];
        
        //判断是否 超出矩阵边界 (a < 0, a >= n, b < 0, b >= m)。
        //判断是否 已经填充过 (res[a][b] 非零)。
        if(a<0 || a>=n || b<0 || b>=m || res[a][b]){
            //(d + 1) % 4 保证 d 在 0~3 之间循环
            d=(d+1)%4;
            
            如果无法前进,则顺时针换方向 (d+1),再计算新方向的 (a, b)
            a=x+dx[d],b=y+dy[d];
        }
        //更新 x, y 为新的位置。
        x=a, y=b;
    }
    
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cout<<res[i][j]<<' ';
        }
        cout<<endl;
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

相关文章:

  • AlarmManager添加定时任务
  • 【JavaEE】快速上手JSON:构建高效 Java 后端数据桥梁,开启交互新篇,以 @RequestBody 为引的探索之旅
  • Amazon 全球买卖商品 库存模型
  • 2、操作系统之软件基础
  • 新手村:数据预处理-异常值检测方法
  • 94.HarmonyOS NEXT动画系统实现教程:深入理解FuncUtils
  • 从被动响应到主动预见:智能可观测性技术的变革与实践
  • 【CVPR-2023】DR2:解决盲人脸复原无法覆盖真实世界所有退化的问题
  • Redis监控:从睁眼瞎到千里眼的进化史
  • WindowsPE文件格式入门01.PE头
  • Maven 的核心包
  • 浅析Model Context Protocol (MCP)协议:概念、优势与实战应用
  • Nest系列:NestJS 中 Logger 完全指南:从基础到企业级实践-04
  • IE代理切换器v1.2免费版
  • Python中的多态与Java、C#、C++中的多态的区别有哪些?
  • Flash Attention原理讲解
  • 解决下载npm 缓存出现的问题
  • 【Redis】缓存穿透、缓存击穿、缓存雪崩
  • 【前缀和的力量:高效解决子数组和矩阵问题的秘笈】—— 蓝桥杯高频热点题型知识点
  • 向量数据库技术系列一-基本原理
  • 国家主席习近平会见斯洛伐克总理菲佐
  • 中华人民共和国和俄罗斯联邦关于进一步加强合作维护国际法权威的联合声明
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案
  • 暴雨及强对流天气黄色预警已发布!南方进入本轮降雨最强时段
  • 北京:下调个人住房公积金贷款利率
  • 公积金利率降至历史低位,百万房贷30年省5万