标签:银币 sum1 分治 sum2 C++ re low heigh coin
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 }
标签:银币,sum1,分治,sum2,C++,re,low,heigh,coin 来源: https://www.cnblogs.com/zhibei/p/11145995.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。