c++题目描述 请使用归并排序,将序列从大到小排序。 输入描述 第1行,一个整数n,表示数组的大小。n<1000. 第2行,n个互不相同的整数。1<=整数<=100000. 输出描述 从大到小排序的数列,数字之间使用空格分隔。
以下是使用归并排序将序列从大到小排序的C++代码: ```cpp #include <iostream> #include <vector> // 合并两个已排序的子数组 void merge(std::vector<int>& arr, int left, int mid, int right) { // 计算两个子数组的长度 int n1 = mid - left + 1; int n2 = right - mid; // 创建临时数组 std::vector<int> L(n1); std::vector<int> R(n2); // 复制数据到临时数组L[]和R[] for (int i = 0; i < n1; i++) L[i] = arr[left + i]; for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j]; // 归并临时数组到arr[left..right] int i = 0; // 初始化第一个子数组的索引 int j = 0; // 初始化第二个子数组的索引 int k = left; // 初始归并子数组的索引 // 从大到小归并 while (i < n1 && j < n2) { if (L[i] >= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } // 复制L[]的剩余元素 while (i < n1) { arr[k] = L[i]; i++; k++; } // 复制R[]的剩余元素 while (j < n2) { arr[k] = R[j]; j++; k++; } } // 归并排序函数 void mergeSort(std::vector<int>& arr, int left, int right) { if (left < right) { // 找到中间点 int mid = left + (right - left) / 2; // 递归排序左半部分和右半部分 mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); // 合并已排序的两部分 merge(arr, left, mid, right); } } int main() { int n; std::cin >> n; std::vector<int> arr(n); for (int i = 0; i < n; i++) { std::cin >> arr[i]; } // 调用归并排序函数 mergeSort(arr, 0, n - 1); // 输出排序后的数组 for (int i = 0; i < n; i++) { std::cout << arr[i]; if (i < n - 1) { std::cout << " "; } } return 0; } ``` 代码解释: 1. `merge`函数用于合并两个已排序的子数组,通过比较两个子数组的元素,将较大的元素优先放入原数组中,实现从大到小的排序。 2. `mergeSort`函数是递归函数,将数组不断地分成两部分,分别对左右两部分进行排序,然后调用`merge`函数合并。 3. `main`函数读取输入,调用`mergeSort`函数进行排序,最后输出排序后的数组。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 注意临时数组的长度和索引,避免数组越界。 2. 递归调用`mergeSort`函数时,要正确计算中间点和左右边界,防止出现死循环。 3. 在输出排序结果时,要注意最后一个元素后面不能有多余的空格,避免格式错误。 [2025-12-26 18:34:30 | AI写代码神器 | 886点数解答]
- [字节豆包] 给定一个包含 个元素的**整数**序列 ,记作 。 求另一个包含 个元素的待定**整数**序列 ,记 ,使得 且 尽可能的小。 输入 第一行一个整数 ,表示序列元素个数。 第二行 个整数,表示序列 。 输出 一行一个整数,表示 的前提下 的最小值。 样例输入 复制 2 4059 -1782 样例输出 复制 99 提示 对于 的数据, , ,且 序列不全为 来源/分类(746点数解答 | 2026-01-24 13:14:40)31
- [字节豆包] 三倍子串 内存限制: 256 Mb时间限制: 1000 ms 题目描述 给定一个十进制正整数 n n,请问可以从 n n 中截取多少种不同的子串,使得子串构成的数字是 3 3 的倍数。 例如:当 n = 1234 n=1234 时,有且仅有 3 3, 12 12, 123 123, 234 234 这四个子串是 3 3 的倍数。 输入格式 单个整数:表示输入的数字 n n 输出格式 单个整数:表示 3 3 的倍数的子串数量。 数据范围 对于 20 % 20% 的数据, 1 ≤ n ≤ 1 0 9 1≤n≤10 9 ; 对于 50 % 50% 的数据, 1 ≤ n ≤ 1 0 100 1≤n≤10 100 ; 对于 70 % 70% 的数据, 1 ≤ n ≤ 1 0 1000 1≤n≤10 1000 ; 对于 100 % 100% 的数据, 1 ≤ n ≤ 1 0 100000 1≤n≤10 100000 样例数据 输入: 95764 输出: 6 说明: 子串6,9,57,576,957,9576是3的倍数 输入: 1111 输出: 2 说(486点数解答 | 2025-08-29 11:52:55)232
- [字节豆包] 题目描述 在甜甜圈王国中,每颗甜甜圈都有一个甜度值 S 来衡量其甜蜜程度。根据甜度的不同,甜甜圈被评定为不同的等级,具体规则如下: 如果 S 在 0 到 25 之间(包含 0 和 25 ),输出 "普通甜甜圈"; 如果 S 在 26 到 50 之间(包含 26 和 50 ),输出 "美味甜甜圈"; 如果 S 在 51 到 75 之间(包含 51 和 75 ),输出 "极品甜甜圈"; 如果 S 在 76 到 99 之间(包含 76 和 99 ),输出 "绝世甜甜圈"; 如果 S 等于 100 ,输出 "传说甜甜圈"。 请根据给定的甜度值 S,输出对应的甜甜圈等级名称。 输入格式 一行一个整数 S,表示甜甜圈的甜度值。(243点数解答 | 2025-12-06 18:35:50)64
- [百度文心] c++描述 一天,一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的。 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示,而岩石用“X”表示,另画家的住所用“D”表示,画家用“S”表示。 有以下几点需要说明: 1.每一分钟画家能向四个方向移动一格(上、下、左、右)。 2.每一分钟洪水能蔓延到四个方向的相邻格子(空白区域)。 3.洪水和画家都不能通过岩石区域。 4.画家不能通过洪水区域(同时也不行,即画家不能移到某个格子,该格子在画家达到的同时被洪水蔓延到了,这也是不允许的)。 5. 洪水蔓不到画家的住所。 给你森林的地图,编写程序输出最少需要花费多长时间才能从开始的位置赶回家中。 输入描述 输入第一行包含两个整数R和C(R,C<=50)。 接下来R行每行包含C个字符(“.”、“*”、“X”、“D”或“S”)。 地图保证只有一个“D”和一个“S”。 输出描述 输出画家最快安全到达住所所需的时间,如果画家不可能安全回家则输出“KAKTUS”。 用例输入 1 3 3 D.* ... .S. 用例输出 1 (1384点数解答 | 2025-03-16 17:33:49)382
- [GPT] 在 dev-c++上面 定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。 输入 总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空 格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行每行内容为,个整数,代表待查找的图书的位置序号。 输出 输出m行 若查找成功: 输出内容为第谈次查询的指定位置上的一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败:只输 出以下提示:抱歉,最住位置上的图书不存在! 样例输入复制 8 9787302257646 data-structure 35.00 9787302164340 operating- system 50.00 9787302219972 software-engineer 32.00 97873022(1650点数解答 | 2024-12-18 09:04:49)386
- [GPT] 在 dev-c++上面 定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。 输入 总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空 格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行每行内容为,个整数,代表待查找的图书的位置序号。 输出 输出m行 若查找成功: 输出内容为第谈次查询的指定位置上的一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败:只输 出以下提示:抱歉,最住位置上的图书不存在! 样例输入复制 8 9787302257646 data-structure 35.00 9787302164340 operating- system 50.00 9787302219972 software-engineer 32.00 97873022(1823点数解答 | 2024-12-18 09:04:51)326
- [字节豆包] c++ 题目:混合类型数据格式化输入输出 描述:顺序读入浮点数1、整数、字符、浮点数2,其间以1个空格作为分隔符。再按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。 输入样例 3.14 100 a 2.71↙ 输出样例 a 100 3.14 2.71↙(187点数解答 | 2024-10-16 14:31:08)356
- [字节豆包] c语言 题目:混合类型数据格式化输入输出 描述:顺序读入浮点数1、整数、字符、浮点数2,其间以1个空格作为分隔符。再按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。 输入样例 3.14 100 a 2.71↙ 输出样例 a 100 3.14 2.71↙(159点数解答 | 2024-10-16 14:32:18)355
- [字节豆包] 有 N 位同学获得了奖学金,现要从中选出两位代表上台领奖。出于“审美”要求,希望选出的两位代表 A 和 B 满足:A 的身高比 B 高,A 获得的奖学金比 B 多,且奖学金的差额大于 M。 请计算选取上台同学的方案数。 输入 第一行包含两个正整数 N 和 M; 第二行包含 N 个正整数 Si,分别代表第 i 位同学获得的奖学金。输入顺序在前的同学身高较高。 输出 输出一个正整数,表示方案数。 样例输入 复制 6 2 6 5 4 3 2 1 样例输出 复制 6 提示 100%的数据满足: 1<= N<= 100000,1<= M<= 100000,1<= Si<= 100000。 来源/分类(406点数解答 | 2025-12-13 10:54:48)39
- [字节豆包] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(693点数解答 | 2025-08-07 10:56:54)204
- [DeepSeek] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(432点数解答 | 2025-08-07 10:58:12)166
- [字节豆包] 救援争先 内存限制: 256 Mb时间限制: 1000 ms 题目描述 某地出现了灾害,各地派出了 n n 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。 给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。 输入格式 第一行:单个整数 n n,表示救援队数量。 第二行到第 n + 1 n+1 行:在第 i + 1 i+1 行,有两个时间,表示第 i i 只救援队的出发时间和路程,数据格式均为 hh:mm: hh 表示小时,在 00 到 23 之间; mm 表示分钟,在 00 到 59 之间。 输出格式 共 n n 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。 数据范围 1 ≤ n ≤ 1000 1≤n≤1000。 样例数据 输入: 3 19:00 01:00 15:00 05:00 15:00 05:00 输出: 2 3 1 说明: 3只队伍同时到达,2号和3号出发较早,所(964点数解答 | 2025-08-11 16:27:09)220