C/C++每日一练(20230429) 螺旋矩阵、戳气球、实现五则运算

简介: C/C++每日一练(20230429) 螺旋矩阵、戳气球、实现五则运算

1. 螺旋矩阵

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

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

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


示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]

输出:[1,2,3,4,8,12,11,10,9,5,6,7]


提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

以下程序实现了这一功能,请你填补空白处内容:

```c++
#include 
using namespace std;
class Solution
{
public:
    vector spiralOrder(vector> &matrix)
    {
        vector ans;
        if (matrix.size() == 0)
            return ans;
        int cir = 0;
        int row = matrix.size();
        int col = matrix[0].size();
        int max_cir = int(min(matrix.size(), matrix[0].size()) + 1) / 2;
        for (; cir < max_cir; cir++)
        {
            for (int i = cir; i < col - cir; i++)
            {
                ans.push_back(matrix[cir][i]);
            }
            for (int i = cir + 1; i < row - cir; i++)
            {
                ans.push_back(matrix[i][col - 1 - cir]);
            }
            __________________;
            for (int i = row - 2 - cir; i > cir && (col - 1 - cir != cir); i--)
            {
                ans.push_back(matrix[i][cir]);
            }
        }
        return ans;
    }
};
```

出处:

https://edu.csdn.net/practice/26819119

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<int> spiralOrder(vector<vector<int>> &matrix)
    {
        vector<int> ans;
        if (matrix.size() == 0)
            return ans;
        int cir = 0;
        int row = matrix.size();
        int col = matrix[0].size();
        int max_cir = int(min(matrix.size(), matrix[0].size()) + 1) / 2;
        for (; cir < max_cir; cir++)
        {
            for (int i = cir; i < col - cir; i++)
            {
                ans.push_back(matrix[cir][i]);
            }
            for (int i = cir + 1; i < row - cir; i++)
            {
                ans.push_back(matrix[i][col - 1 - cir]);
            }
      for (int i = col - 2 - cir; i >= cir && (row - 1 - cir != cir); i--)
      {
          ans.push_back(matrix[row - cir - 1][i]);
      }
            for (int i = row - 2 - cir; i > cir && (col - 1 - cir != cir); i--)
            {
                ans.push_back(matrix[i][cir]);
            }
        }
        return ans;
    }
};
string vectorToString(vector<int> vect) {
    stringstream ss;
  ss << "[";
    for (int i = 0; i < (int)vect.size(); i++)
  {
        ss << vect[i];
        if (i < (int)vect.size() - 1)
          ss << ",";
    }
    ss << "]";
    return ss.str();
}
int main()
{
  Solution s;
  vector<vector<int>> matrix = {{1,2,3},{4,5,6},{7,8,9}};
  cout << vectorToString(s.spiralOrder(matrix)) << endl;
  matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  cout << vectorToString(s.spiralOrder(matrix)) << endl;
  return 0;
}

输出:

[1,2,3,6,9,8,7,4,5]

[1,2,3,4,8,12,11,10,9,5,6,7]


2. 戳气球

n 个气球,编号为0n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。

求所能获得硬币的最大数量。

示例 1:

输入:nums = [3,1,5,8]

输出:167

解释:

nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []

coins =  3*1*5    +   3*5*8   +  1*3*8  + 1*8*1 = 167

示例 2:

输入:nums = [1,5]

输出:10


提示:

  • n == nums.length
  • 1 <= n <= 500
  • 0 <= nums[i] <= 100

出处:

https://edu.csdn.net/practice/26819120

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<int> spiralOrder(vector<vector<int>> &matrix)
    {
        vector<int> ans;
        if (matrix.size() == 0)
            return ans;
        int cir = 0;
        int row = matrix.size();
        int col = matrix[0].size();
        int max_cir = int(min(matrix.size(), matrix[0].size()) + 1) / 2;
        for (; cir < max_cir; cir++)
        {
            for (int i = cir; i < col - cir; i++)
            {
                ans.push_back(matrix[cir][i]);
            }
            for (int i = cir + 1; i < row - cir; i++)
            {
                ans.push_back(matrix[i][col - 1 - cir]);
            }
      for (int i = col - 2 - cir; i >= cir && (row - 1 - cir != cir); i--)
      {
          ans.push_back(matrix[row - cir - 1][i]);
      }
            for (int i = row - 2 - cir; i > cir && (col - 1 - cir != cir); i--)
            {
                ans.push_back(matrix[i][cir]);
            }
        }
        return ans;
    }
};
string vectorToString(vector<int> vect) {
    stringstream ss;
  ss << "[";
    for (int i = 0; i < (int)vect.size(); i++)
  {
        ss << vect[i];
        if (i < (int)vect.size() - 1)
          ss << ",";
    }
    ss << "]";
    return ss.str();
}
int main()
{
  Solution s;
  vector<vector<int>> matrix = {{1,2,3},{4,5,6},{7,8,9}};
  cout << vectorToString(s.spiralOrder(matrix)) << endl;
  matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  cout << vectorToString(s.spiralOrder(matrix)) << endl;
  return 0;
}

输出:

[1,2,3,6,9,8,7,4,5]

[1,2,3,4,8,12,11,10,9,5,6,7]


3. 实现五则运算

设计一个可以完成任意五则运算(加法/减法/乘法/除法/取余)的程序。除法按照计算机中整型相除来计算。 输入格式 多行输入,每输入一行数据对应输出一行。 每行输入格式为 a # b,其中 #∈{+,−,∗,/,%} a,b均为自然数 输出格式 每行输出对应的计算结果; 当运算为除法/取余的时候,如果除数为 0 ,输出 WA

输入样例

2+2
4*5
6/7
4%3
4%0

输出样例

4
20
0
1
WA

以下程序实现了这一功能,请你补全空白处内容:

```c++
#include 
int main()
{
    int a;
    int b;
    char operation;
    int num;
    while (scanf("%d", &a) != EOF)
    {
        scanf("%c", &operation);
        scanf("%d", &b);
        if (operation == '+')
        {
            num = a + b;
            printf("%d\n", num);
        }
        else if (operation == '-')
        {
            num = a - b;
            printf("%d\n", num);
        }
        else if (operation == '*')
        {
            num = a * b;
            printf("%d\n", num);
        }
        _________________________;
        else
        {
            printf("%s\n", "WA");
        }
    }
    return 0;
}
```

出处:

https://edu.csdn.net/practice/26819121

代码:

#include <stdio.h>
int main()
{
    int a;
    int b;
    char operation;
    int num;
    while (scanf("%d", &a) != EOF)
    {
        scanf("%c", &operation);
        scanf("%d", &b);
        if (operation == '+')
        {
            num = a + b;
            printf("%d\n", num);
        }
        else if (operation == '-')
        {
            num = a - b;
            printf("%d\n", num);
        }
        else if (operation == '*')
        {
            num = a * b;
            printf("%d\n", num);
        }
    else if (operation == '/' && b != 0)
    {
        num = a / b;
        printf("%d\n", num);
    }
    else if (operation == '%' && b != 0)
    {
        num = a % b;
        printf("%d\n", num);
    }
        else
        {
            printf("%s\n", "WA");
        }
    }
    return 0;
}

输出:


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
机器学习/深度学习 算法 测试技术
【动态规划】C++算法312 戳气球
【动态规划】C++算法312 戳气球
|
11月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
563 77
|
11月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
465 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
C++
C++程序中的关系运算
C++程序中的关系运算
289 1
|
C++
C++程序中的逻辑运算
C++程序中的逻辑运算
252 1
|
11月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
371 12
|
11月前
|
存储 C语言 C++
【C++数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现链栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储整数,最大
254 9
|
11月前
|
存储 算法 测试技术
【C++数据结构——线性表】求集合的并、交和差运算(头歌实践教学平台习题)【合集】
本任务要求编写程序求两个集合的并集、交集和差集。主要内容包括: 1. **单链表表示集合**:使用单链表存储集合元素,确保元素唯一且无序。 2. **求并集**:遍历两个集合,将所有不同元素加入新链表。 3. **求交集**:遍历集合A,检查元素是否在集合B中存在,若存在则加入结果链表。 4. **求差集**:遍历集合A,检查元素是否不在集合B中,若满足条件则加入结果链表。 通过C++代码实现上述操作,并提供测试用例验证结果。测试输入为两个集合的元素,输出为有序集合A、B,以及它们的并集、交集和差集。 示例测试输入: ``` a c e f a b d e h i ``` 预期输出:
354 7
|
11月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
563 5
|
11月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】顺序表的基本运算(头歌实践教学平台习题)【合集】
本文档介绍了线性表的基本运算任务,涵盖顺序表和链表的初始化、销毁、判定是否为空、求长度、输出、查找元素、插入和删除元素等内容。通过C++代码示例详细展示了每一步骤的具体实现方法,并提供了测试说明和通关代码。 主要内容包括: - **任务描述**:实现顺序表的基本运算。 - **相关知识**:介绍线性表的基本概念及操作,如初始化、销毁、判定是否为空表等。 - **具体操作**:详述顺序表和链表的初始化、求长度、输出、查找、插入和删除元素的方法,并附有代码示例。 - **测试说明**:提供测试输入和预期输出,确保代码正确性。 - **通关代码**:给出完整的C++代码实现,帮助完成任务。 文档
395 5