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:

1c83ff2d8f7cc194b08715bacdedff99.jpeg


输入: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 <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 = 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 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 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 。



输入样例

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


输出样例

1. 4
2. 20
3. 0
4. 1
5. WA


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

```c++

#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
        {
            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;
}

输出:

目录
相关文章
|
2月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
71 1
Linux 终端操作命令(1)
|
2月前
|
算法 Java Go
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
30 1
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
|
2月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
35 0
Linux 终端命令之文件浏览(4) head, tail
|
2月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
53 0
Linux 终端操作命令(3)内部命令用法
|
2月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
127 0
Linux系统部署Python语言开发运行环境
|
2月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
66 0
Go语言time库,时间和日期相关的操作方法
|
2月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
33 0
力扣C++|一题多解之数学题专场(2)
|
2月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
53 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
2月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
41 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
2月前
|
Java Go C++
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
32 0
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort