经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
洛谷题目:找出次品
来源:cnblogs  作者:借我杀死庸碌的情怀  时间:2021/3/8 12:06:53  对本文有异议

T130870 找出次品

题目背景

题目描述

给定一串小球,其中有一个是次品(次品会轻一些)。正常小球用1表示,次品小球用0表示,要求将次品小球的编号找出(编号从11开始) 要求:

  1. 需定义一个天平函数int balance(bool *a, int a_count, bool *b, int b_count),a和b均为小球数组,a_count、b_count为两数组所含小球的数量。若a重,则返回1;b重,则返回-1;a,b等重,返回0。
  2. 利用天平函数,设计递归算法来进行题目给出的小球次品的寻找。

输入格式

第一行一个整数n,表示小球的数量。
第二行n个整数,其中1个为0,其余n-1个为1,请找出次品的编号。

输出格式

一个整数(1…n),表示次品的位置。

输入输出样例

输入 #1

  1. 5
  2. 1 1 1 0 1

输出 #1

  1. 4

说明/提示

1≤n≤1,000

参考解答:

  1. #include<iostream>
  2. using namespace std;
  3. int find(int* weight, int left, int right) {//首次传入的left为数组最左边的一个下标,首次传入的right为数组最右边的一个下标,返回值为次品所对应的数组下标
  4. if (left + 1 == right) {//如果仅有两个球 或 递归算法进行到仅剩两个球的时候
  5. return weight[left] < weight[right] ? left : right;
  6. }
  7. int mid = left + (right - left) / 2;//中间位置的小球
  8. int Lsum = 0, Rsum = 0;//Lsum表示左侧天平所有小球的质量,Rsum表示右侧天平所有小球的质量
  9. if ((right - left + 1) % 2 == 0) {//如果有(大于2的)偶数个球
  10. for (int i = left; i <= mid; ++i) {
  11. Lsum += weight[i];
  12. }
  13. for (int i = mid + 1; i <= right; ++i) {
  14. Rsum += weight[i];
  15. }
  16. return Lsum < Rsum ? find(weight, left, mid) : find(weight, mid + 1, right);//返回质量较轻的一组进行递归
  17. }
  18. else {//如果有(大于1的)奇数个球
  19. for (int i = left; i <= mid-1; ++i) {
  20. Lsum += weight[i];
  21. }
  22. for (int i = mid + 1; i <= right; ++i) {
  23. Rsum += weight[i];
  24. }
  25. //此时表示将中间小球拿出,剩下偶数个小球,Lsum为mid左侧所有小球的质量,Rsum为mid右侧所有小球的质量
  26. if (Lsum == Rsum)return mid;//如果左右两侧小球的质量相同,返回中间位置小球的下标
  27. else return Lsum < Rsum ? find(weight, left, mid-1) : find(weight, mid + 1, right);
  28. }
  29. }
  30. int main() {
  31. ios::sync_with_stdio(false);
  32. cin.tie(0);
  33. cout.tie(0);
  34. int n;
  35. cin >> n;
  36. int* weight = new int[n];
  37. for (int i = 0; i < n; ++i) {
  38. cin >> weight[i];
  39. }
  40. if (n == 1) {
  41. cout << 1;//如果仅有一个球,默认此球即为次品
  42. }
  43. else cout << find(weight, 0, n - 1) + 1 << endl;
  44. delete[]weight;
  45. return 0;
  46. }

原文链接:http://www.cnblogs.com/xinyang-2021/p/xinyang.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号