C/C++每日一练(20230412)
目录
1. 二维数组找最值 🌟🌟
2. 排序 🌟
3. 二叉树展开为链表 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 二维数组找最值
从键盘输入m(2<=m<=6)行n(2<=n<=6)列整型数据,编程找出其中的最大值及其所在位置的行列下标值并输出。 输入格式: 在第一行输入数据的行数m和列数n的值,从第二行开始以二维数组的形式依次输入m行n列整型数据。 输出格式: 依次输出最大值及其所在位置的行列下标值,中间以逗号,分隔,最后换行。
输入样例:
3 4
1 2 3 4
8 9 7 6
5 6 7 0
输出样例:
9,1,1
以下程序实现了这一功能,请你填补空白处内容:
```c++
#include <stdio.h>
int main()
{
int a[6][6];
int m, n;
int i, j;
int max;
int indexx = 0, indexy = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
if (i == 0 && j == 0)
{
max = a[i][j];
indexx = 0;
indexy = 0;
}
else
{
_____________;
}
}
}
printf("%d,%d,%d\n", max, indexx, indexy);
return 0;
}
```
出处:
https://edu.csdn.net/practice/25405422
代码:
#include <stdio.h>
int main()
{
int a[6][6];
int m, n;
int i, j;
int max;
int indexx = 0, indexy = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
if (i == 0 && j == 0)
{
max = a[i][j];
indexx = 0;
indexy = 0;
}
else
{
if (a[i][j] > max)
{
max = a[i][j];
indexx = i;
indexy = j;
}
}
}
}
printf("%d,%d,%d\n", max, indexx, indexy);
return 0;
}
输入输出:
3 4
1 2 3 4
8 9 7 6
5 6 7 0
9,1,1
2. 排序
由键盘上输入n个整数,请将这些数从大到小排序,然后输出排序后的数列。
输入
输入包含两行:
第一行是n(1 <= n <= 1000)。
第二行是n个整数,邻近两数之间用一个空格隔开。
输出
输出排序后的n个整数,邻近两数之间用一个空格隔开。
输入示例
5
8 2 5 1 2
输出示例
8 5 2 2 1
数据范围
输入和输出均为int范围的整数
以下程序实现了这一功能,请你补全空白处内容:
```c++
#include <iostream>
using namespace std;
int main()
{
int n, tmp;
cin >> n;
int *a = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
__________________;
}
}
for (int i = 0; i < n; i++)
{
cout << a[i];
if (i != n - 1)
cout << " ";
}
return 0;
}
```
出处:
https://edu.csdn.net/practice/25405423
代码:
#include <stdio.h>
int main()
{
int a[6][6];
int m, n;
int i, j;
int max;
int indexx = 0, indexy = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
if (i == 0 && j == 0)
{
max = a[i][j];
indexx = 0;
indexy = 0;
}
else
{
if (a[i][j] > max)
{
max = a[i][j];
indexx = i;
indexy = j;
}
}
}
}
printf("%d,%d,%d\n", max, indexx, indexy);
return 0;
}
输出:
5
8 2 5 1 2
8 5 2 2 1
3. 二叉树展开为链表
给你二叉树的根结点 root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例 1:
输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [0] 输出:[0]
提示:
- 树中结点数在范围
[0, 2000]
内 -100 <= Node.val <= 100
进阶:你可以使用原地算法(O(1)
额外空间)展开这棵树吗?
出处:
https://edu.csdn.net/practice/25405424
代码:
#define null INT_MIN
#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
void rconnect(TreeNode *&node, TreeNode *pmove)
{
if (pmove == nullptr)
return;
node->right = new TreeNode(pmove->val);
node->left = nullptr;
node = node->right;
rconnect(node, pmove->left);
rconnect(node, pmove->right);
}
void flatten(TreeNode *root)
{
if (root == nullptr)
return;
TreeNode *head = new TreeNode(null);
TreeNode *newroot = head;
rconnect(head, root);
newroot = newroot->right->right;
root->right = newroot;
root->left = nullptr;
}
};
TreeNode* buildTree(vector<int>& nums)
{
if (nums.empty()) return nullptr;
TreeNode *root = new TreeNode(nums.front());
queue<TreeNode*> q;
q.push(root);
int i = 1;
while(!q.empty() && i < nums.size())
{
TreeNode *cur = q.front();
q.pop();
if(i < nums.size() && nums[i] != null)
{
cur->left = new TreeNode(nums[i]);
q.push(cur->left);
}
i++;
if(i < nums.size() && nums[i] != null)
{
cur->right = new TreeNode(nums[i]);
q.push(cur->right);
}
i++;
}
return root;
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
st.push(root);
while (!st.empty()) {
TreeNode* node = st.top();
st.pop();
if (node != nullptr) {
res.push_back(node->val);
st.push(node->right);
st.push(node->left);
}
else
res.push_back(null);
}
while (res.back()==null)
res.pop_back();
return res;
}
string vectorToString(vector<int> vect) {
stringstream ss;
ss << "[";
for (size_t i = 0; i < vect.size(); i++)
{
ss << (vect[i] == null ? "null" : to_string(vect[i]));
ss << (i < vect.size() - 1 ? "," : "]");
}
return ss.str();
}
int main() {
Solution s;
vector<int> nums = {1,2,5,3,4,null,6};
TreeNode* root = buildTree(nums);
s.flatten(root);
cout << vectorToString(preorderTraversal(root)) << endl;
return 0;
}
输出:
[1,null,2,null,3,null,4,null,5,null,6]
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |