【算法】给你一个数字算出螺旋矩阵,要不要来试一试?

14天阅读挑战赛

  • 努力是为了不平庸~
  • 行动起来,没有什么不可以!

在这里插入图片描述

算法螺旋矩阵题目描述

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
在这里插入图片描述

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

1 <= n <= 20

题目难度:中等难度
题目类型:用到数组,矩阵。

java解题代码参考

public class GenerateMatrix {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        if (n == 0) {
            return res;
        }
        int left = 0;
        int right = n - 1;
        int up = 0;
        int down = n - 1;
        int i = 1;
        while (i <= n * n) {
            for (int col = left; col <= right; col++) {
                res[up][col] = i;
                i++;
            }
            up++;
            if (i <= n * n) {
                for (int j = up; j <= down; j++) {
                    res[j][right] = i;
                    i++;
                }
                right--;
            }
            if (i <= n * n) {
                for (int j = right; j >= left; j--) {
                    res[down][j] = i;
                    i++;
                }
                down--;
            }
            if (i <= n * n) {
                for (int j = down; j >= up; j--) {
                    res[j][left] = i;
                    i++;
                }
                left++;
            }
        }
        return res;
    }
    public static void main(String[] args) {
        GenerateMatrix a = new GenerateMatrix();
        a.generateMatrix(3);
    }
}

算法题目《微生物增殖》描述

在这里插入图片描述

假设有两种微生物 X 和 Y
X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。

以下程序实现了这一功能,请你补全空白处内容:
提示:
分析可知,Y分别会在0.5,1.5,2.5······时被吃,所以,把60分钟分成120份,则在除以2余数为1时,Y的数目减少X个

#include <iostream>
using namespace std;
int main()
{
    int x = 10, y = 90;
    for (int i = 1; i <= 120; i++)
    {
        ________________;
    }
    cout << y << endl;
}

解答代码如下

if (i % 2 == 1)
    y -= x;
if (i % 4 == 0)
    y *= 2;
if (i % 6 == 0)
    x *= 2;

算法题目是不是很有意思。。。

  • 学习算法要知道的几个常识:
    在这里插入图片描述

持之以恒的去学习,没有什么是学不会的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小冷coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值