C++ 分治思想 真假银币

Posted zhibei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 分治思想 真假银币相关的知识,希望对你有一定的参考价值。

 1 #include "stdio.h"
 2 #include "iostream"
 3 #define MAXNUM 30
 4 
 5 int FalseCoin(int coin[], int low, int heigh)
 6 
 7 int i, sum1, sum2, sum3;
 8 int re;
 9 
10 sum1 = sum2 = sum3 = 0;
11 if (low + 1 == heigh)
12 
13 if (coin[low] < coin[heigh])
14 
15 re = low + 1;
16 return re;
17 
18 else
19 
20 re = heigh + 1;
21 return re;
22 
23 
24 if ((heigh - low + 1) % 2 == 0) //n是偶数
25 
26 for (i = low; i < low+(heigh - low) / 2; i++)
27 
28 sum1 = sum1 + coin[i];
29 
30 for (i = low + (heigh - low) / 2 + 1; i < heigh; i++)
31 
32 sum2 = sum2 + coin[i];
33 
34 if (sum1 > sum2)
35 
36 re = FalseCoin(coin, low + (heigh - low) / 2 + 1, heigh);
37 return re;
38 
39 else
40 
41 
42 
43 else
44 
45 for (i = low; i < low+(heigh - low) / 2 - 1; i++)
46 
47 sum1 = sum1 + coin[i];
48 
49 for (i = low + (heigh - low) / 2 + 1; i < heigh; i++)
50 
51 sum2 = sum2 + coin[i];
52 
53 sum3 = coin[low + (heigh - low) / 2];
54 if (sum1 > sum2)
55 
56 re = FalseCoin(coin, low + (heigh - low) / 2 + 1, heigh);
57 return re;
58 
59 else if (sum1 < sum2)
60 
61 re = FalseCoin(coin, low, low + (heigh - low) / 2 - 1);
62 return re;
63 
64 else
65 
66 
67 if (sum1 + sum3 == sum2 + sum3)
68 
69 re = low + (heigh - low) / 2 + 1;
70 return re;
71 
72 
73 
74 
75 int main()
76 
77 int coin[MAXNUM];
78 int i, n;
79 int weizhi;
80 scanf("%d",&n);
81 for (i = 0; i < n; i++)
82 
83 scanf("%d",coin[i]);
84 
85 weizhi = FalseCoin(coin, 0, n - 1);
86 printf("在上述%d个银币中,第 %d 个银币是假的!\n",n,weizhi);
87 system("pause");
88 return 0;
89 

 

以上是关于C++ 分治思想 真假银币的主要内容,如果未能解决你的问题,请参考以下文章

C++经典算法问题:循环赛日程安排问题(分治思想)

算法导论—分治法思想动态规划思想贪心思想

递归与分治思想:汉诺塔(递归 && 分治思想)

python_分治算法贪心算法动态规划算法

对分治法思想的体会及结对编程情况汇报

cdq分治浅谈