给定两个长度为 n 的整数数组 A 和 B。每次操作可以选择数组 A 中的一个元素和数组 B 中的一个元素(可以是任意位置,包括相同位置),将它们各自加 1。求最少需要多少次操作,才能使数组 A 和数组 B 完全相等(即 A[i] = B[i] 对所有 i 成立)。如果无法使两个数组相等,则输出 -1。 作者:relimount 链接:https://www.nowcoder.com/feed/main/detail/d3efc76fe5ea40a98a3451ca43697f5f?sourceSSR=search 来源:牛客网 语言方向:C++
以下是解决该问题的 C++ 代码: ```cpp #include <iostream> #include <vector> // 函数用于计算使两个数组相等所需的最少操作次数 int minOperationsToEqual(std::vector<int>& A, std::vector<int>& B) { int n = A.size(); // 首先检查两个数组对应元素差值的总和是否为偶数 // 因为每次操作是同时对 A 和 B 中的元素加 1,所以两个数组对应元素差值的总和必须是偶数才能使它们相等 int diffSum = 0; for (int i = 0; i < n; ++i) { diffSum += A[i] - B[i]; } if (diffSum % 2 != 0) { return -1; } // 计算需要的操作次数 int operations = 0; for (int i = 0; i < n; ++i) { int diff = A[i] - B[i]; if (diff > 0) { // 如果 A[i] 大于 B[i],则需要将 B[i] 增加到 A[i] operations += diff; } } return operations; } int main() { std::vector<int> A = {1, 2, 3}; std::vector<int> B = {2, 3, 4}; int result = minOperationsToEqual(A, B); std::cout << "最少操作次数: " << result << std::endl; return 0; } ``` 代码解释 1. 检查差值总和是否为偶数:首先遍历两个数组,计算 `A[i] - B[i]` 的总和。因为每次操作是同时对 `A` 和 `B` 中的元素加 1,所以两个数组对应元素差值的总和必须是偶数才能使它们相等。如果差值总和是奇数,则无法使两个数组相等,返回 -1。 2. 计算操作次数:再次遍历数组,对于 `A[i] > B[i]` 的情况,计算需要将 `B[i]` 增加到 `A[i]` 的操作次数,并累加到 `operations` 中。 需要小心的地方 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 要确保输入的两个数组长度相等,否则代码可能会出现越界访问的错误。 2. 在计算差值总和时,要注意数据类型的选择,避免溢出问题。 3. 对于无法使两个数组相等的情况,要正确处理并返回 -1,避免出现逻辑错误。 [2025-11-05 22:15:18 | AI写代码神器 | 605点数解答]
- [字节豆包] 给定两个长度为 n 的整数数组 A 和 B。每次操作可以选择数组 A 中的一个元素和数组 B 中的一个元素(可以是任意位置,包括相同位置),将它们各自加 1。求最少需要多少次操作,才能使数组 A 和数组 B 完全相等(即 A[i] = B[i] 对所有 i 成立)。如果无法使两个数组相等,则输出 -1。 作者:relimount 链接:https://www.nowcoder.com/feed/main/detail/d3efc76fe5ea40a98a3451ca43697f5f?sourceSSR=search 来源:牛客网 语言方向:C++(605点数解答 | 2025-11-05 22:15:18)49
- [DeepSeek] 小核桃准备使用 a 数组,存储战力为1~10的守卫各有多少个。 即:a[1] 存储战斗力为1的守卫数量,a[2] 存储战斗力为 2 的守卫数量,... 依次类推,a[10] 存储战斗力为 10 的守卫数量。 请你编写程序,使用数组依次存储战力1~10的守卫数量,并按数组下标顺序(从小到大),依次输出每个守卫的战力。 样例1解释: 样例1 输入数据依次表示:战力为1 的守卫有 3 个,战力为3的守卫有 1 个,战力 为4 的守卫有 2 个,战力为 8 的守卫有 2 个,其余战力为2.5.6.7.9.10的守卫数量都为 0。 所以依次输出 三 个 1,一个 3,两个 4,两个 8。 输入: 十个整数,即1~10中每个数的个数。 输出: 一行若干个整数,为从小到大排好序的数,相邻数字之间用空格隔开。 c++(130点数解答 | 2026-01-17 14:11:22)30
- [字节豆包] 用C++给定一个整数 N N,判断其正负。如果 N > 0 N>0,输出 p o s i t i v e positive; 如果 N = 0 N=0,输出 z e r o zero; 如果 N < 0 N<0,输出 n e g a t i v e negative。 输入 一个整数 N ( − 10 9 ≤ N ≤ 10 9 ) N(−10 9 ≤N≤10 9 )。 输出 如果 N > 0 N>0, 输出 p o s i t i v e positive; 如果 N = 0 N=0, 输出 z e r o zero; 如果 N < 0 N<0, 输出 n e g a t i v e negative。 回答篇幅:越详细越好(610点数解答 | 2026-01-24 22:28:14)34
- [字节豆包] 用C++给定一个整数 N N,判断其正负。如果 N > 0 N>0,输出 p o s i t i v e positive; 如果 N = 0 N=0,输出 z e r o zero; 如果 N < 0 N<0,输出 n e g a t i v e negative。 输入 一个整数 N ( − 10 9 ≤ N ≤ 10 9 ) N(−10 9 ≤N≤10 9 )。 输出 如果 N > 0 N>0, 输出 p o s i t i v e positive; 如果 N = 0 N=0, 输出 z e r o zero; 如果 N < 0 N<0, 输出 n e g a t i v e negative。(150点数解答 | 2026-01-24 22:29:16)37
- [字节豆包] 题目描述 Q老师在班级中管理着同学们的成绩。你需要帮助Q老师完成以下两项任务: 修改某个同学的成绩,需要给出学生编号 num (编号从 1 开始)和修改后的成绩 grade。 查看所有同学的成绩。 Q老师会给你所有同学的成绩,接下来会有若干操作,根据操作的类型来修改成绩或查看所有成绩。 输入格式 第一行输入整数 n,表示学生人数。 接下来输入 n 行,每行输入一个学生的成绩(整数)。 然后输入整数 m,表示接下来有 m 个操作。操作有两种: update 操作:修改某个学生的成绩,接下来输入学生编号 num( 1≤num≤n)和修改后的成绩 grade。 view_all 操作:输出当前所有学生的成绩。 输出格式 对于每个 view_all 操作,输出当前所有学生的成绩列表。(191点数解答 | 2025-12-20 20:55:41)44
- [字节豆包] Q老师在班级中管理着同学们的成绩。你需要帮助Q老师完成以下两项任务: 修改某个同学的成绩,需要给出学生编号 num (编号从 1 开始)和修改后的成绩 grade。 查看所有同学的成绩。 Q老师会给你所有同学的成绩,接下来会有若干操作,根据操作的类型来修改成绩或查看所有成绩。 输入格式 第一行输入整数 n,表示学生人数。 接下来输入 n 行,每行输入一个学生的成绩(整数)。 然后输入整数 m,表示接下来有 m 个操作。操作有两种: update 操作:修改某个学生的成绩,接下来输入学生编号 num( 1≤num≤n)和修改后的成绩 grade。 view_all 操作:输出当前所有学生的成绩。 输出格式 对于每个 view_all 操作,输出当前所有学生的成绩列表。(326点数解答 | 2025-12-27 20:48:12)38
- [GPT] 链接:https://ac.nowcoder.com/acm/contest/96846/b 来源:牛客网 小 z 获得了一个长度为 𝑛 n 的序列 𝑎 1 , 𝑎 2 , … , 𝑎 𝑛 a 1 ,a 2 ,…,a n ,现在他希望在每相邻的两个数字之间插入 加号或乘号。 但是很不幸,年仅三岁的小 z 对加减乘除的运算顺序掌握的并不很好。在他的理解中,所有算式都是从左往右计算的。例如对于算式 1 + 2 × 3 + 4 1+2×3+4,小 z 会这么计算: 1 + 2 × 3 + 4 → 3 × 3 + 4 → 9 + 4 → 13 1+2×3+4→3×3+4→9+4→13 小 z 希望你告诉他,在他理解的计算规则下,这个式子通过合理地插入 加号或乘号,最大能达到的值会是多少呢? 更进一步的,小 z 想知道:如果他可以重新排列这 𝑛 n 个数字,按照他理解的计算方法,这个式子最大结果又会是多少呢? 小 z 的数学很差,于是他只好求助聪明的你,请你告诉他 原始数列的答案 和 重排后的答案 分别是多少?由于这个式子的结果可能会很大,因(662点数解答 | 2024-11-23 17:43:39)158
- [字节豆包] 链接:https://ac.nowcoder.com/acm/contest/113410/D 来源:牛客网 题目描述 小 I 很喜欢完全平方数,同时他也很喜欢递增的序列,所以他丢给了你这样一个题目。 你需要构造一个长度为 𝑛 n 的整数序列 𝑎 1 , 𝑎 2 , … , 𝑎 𝑛 a 1 ,a 2 ,…,a n ,要求序列中任意连续 𝑚 m 个数的和都是完全平方数,并且该序列中的数严格递增,即满足 𝑎 1 < 𝑎 2 < ⋯ < 𝑎 𝑛 a 1 <a 2 <⋯<a n 。 输入描述: 一行两个整数 𝑛 n, 𝑚 m( 1 ≤ 𝑚 ≤ 𝑛 ≤ 1 0 6 1≤m≤n≤10 6 ),意义同题面。 输出描述: 一行 𝑛 n 个整数,表示构造的序列 𝑎 1 , 𝑎 2 , … , 𝑎 𝑛 a 1 ,a 2 ,…,a n 。序列中任意连续 𝑚 m 个数的和都是完全平方数,并且该序列中的数严格递增。 序列中的所有数都应在 [ − 1 0 12 ; 1 0(669点数解答 | 2025-07-10 15:27:32)102
- [字节豆包] 你要开始一场数轴旅行,初始时,你所在的位置为 � = 0 x=0 ,你想要去 � = � x=d 位置。 给定 � n 个整数 � 1 , � 2 , . . . , � � a 1 ,a 2 ,...,a n ,表示每次你可以往左移动 � � a i 个单位或往右移动 � � a i 个单位。 请问,最终能否到达 � = � x=d 位置?能则输出 Yes,不能输出 No。 输入 输入共两行: 第一行,两个整数 n,d 第二行,n 个正整数 输出 输出能否达到最终目标位置。 样例输入 复制 2 -4 6 8 样例输出 复制 Yes 提示 对于 30 % 30% 的数据,满足 1 ≤ � ≤ 10 1≤n≤10, 1 ≤ � � ≤ 10 1≤a i ≤10, − 20 ≤ � ≤ 20 −20≤d≤20。 对于 60 % 60% 的数据,满足 1 ≤ � ≤ 1 0 3 1≤n≤10 3 , 1 ≤ � � ≤ 1 0 3 1≤a i ≤10 3 , − 1 0 4 ≤ � ≤ 1 0 4 −10 4 ≤d(225点数解答 | 2026-01-23 19:51:03)27
- [字节豆包] 题目描述 在甜甜圈王国中,每颗甜甜圈都有一个甜度值 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)59
- [GPT] 实现哈希表创建及查找算法,哈希函数使用除余法,用线性探测法处理冲突。 函数接口定义: void createhash(hashtable ht[],int n); //输入不大于m的n个不为0(0表示空值)的数,用线性探查法解决冲突构造散列表 int searchhash(hashtable ht[],int key); //输入一个值key,在散列表中查找key位置 其中 ht 表示哈希表, n表示记录数,key要查找的关键字 裁判测试程序样例: #include<iostream> using namespace std; #define m 16 #define nullkey 0 //单元为空的标记 struct hashtable{ int key; }; void createhash(hashtable ht[],int n); int searchhash(hashtable ht[],int key); int main() { int value,key; int result; int i,j,n; hashtable ht[m]; for(i=0;i<m;i++) ht[i].key=0; cin >> n; if(n>m) return 0; createhash(ht,n); cin >> key; result=searchhash(ht,key); if(result!=-1) cout << "search success,the key is located in "<< result+1; else cout << "search failed"; return 0; } /* 请在这里填写答案 */ 输入样例: 12 19 14 23 1 68 20 84 27 55 11 10 79 55 输出样例: 输出拓扑序列。 search success,the key is located in 6(504点数解答 | 2024-12-21 16:14:58)252
- [阿里通义] 实现哈希表创建及查找算法,哈希函数使用除余法,用线性探测法处理冲突。 函数接口定义: void createhash(hashtable ht[],int n); //输入不大于m的n个不为0(0表示空值)的数,用线性探查法解决冲突构造散列表 int searchhash(hashtable ht[],int key); //输入一个值key,在散列表中查找key位置 其中 ht 表示哈希表, n表示记录数,key要查找的关键字 裁判测试程序样例: #include<iostream> using namespace std; #define m 16 #define nullkey 0 //单元为空的标记 struct hashtable{ int key; }; void createhash(hashtable ht[],int n); int searchhash(hashtable ht[],int key); int main() { int value,key; int result; int i,j,n; hashtable ht[m]; for(i=0;i<m;i++) ht[i].key=0; cin >> n; if(n>m) return 0; createhash(ht,n); cin >> key; result=searchhash(ht,key); if(result!=-1) cout << "search success,the key is located in "<< result+1; else cout << "search failed"; return 0; } /* 请在这里填写答案 */ 输入样例: 12 19 14 23 1 68 20 84 27 55 11 10 79 55 输出样例: 输出拓扑序列。 search success,the key is located in 6(328点数解答 | 2024-12-21 16:15:59)306