日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

假币问题 (n枚硬币+未知轻重+DFS)

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 假币问题 (n枚硬币+未知轻重+DFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

n(n>=3)n(n>=3)n(n>=3)枚硬幣中有一枚重量不合格的硬幣(過輕或者過重),若只有一架天平可以用來稱重,且稱重的硬幣數量沒有限制,設計一個算法找出這枚不合格的硬幣,使得稱重次數最少

題目分析

本題用的是減治法,我找了很多網上的寫法,但是沒有符合我想象中的代碼,或者就是題目略有不同,所以決定自己寫一個。寫的時候花了很長時間處理邊界問題。
注意本題是n枚硬幣,并且沒有事先告知硬幣是偏重還是偏輕,因此如果就是根據重量的大小來判斷,無法得到正確的答案。

遞歸C++

主要的思想是根據數組的奇偶來分:

  • 長度為奇數時,先不考慮第一個元素,對往后的元素分兩段求和,判斷它們的大小。如果不相等,則先后遞歸處理左右兩段。如果相等,并且第一個元素不等于第二個元素(這個條件很重要,若只是后面兩段相等,并不能得出第一個元素就是假幣),那么第一個元素就是假幣
  • 長度為偶數時,將數組分成長度相等的兩段,并分別求和。若相等,則假幣不在這個區間里;若不等,遞歸處理左右兩段
#include <iostream> #include <vector> #include <ctime> #include <algorithm> using namespace std; vector<int> coins; int N;void make_coins() {int tweight = rand() % 10 + 1; //生成[1,10]之間的隨機數代表真硬幣重量 for (int i = 0; i < N; i++) coins[i] = tweight;int fweight = rand() % 20 + 1; //生成[1,20]之間的隨機數代表假硬幣重量int pos = rand() % N; // 生成[0,N)之間的隨機數,代表假硬幣的位置while (fweight == tweight) fweight = rand() % 20 + 1;coins[pos] = fweight; // codeslogan }int sum_arr(int l, int r) {int sum = 0;for (int i = l; i <= r; i++) sum += coins[i];return sum; }int dfs(int n, int l, int r) {// 當剩余的長度為2時,根據當前兩個元素的大小,及它們的前后關系判斷 if(n == 2) { if (coins[l] != coins[r]) {if ((l-1) >= 0) return coins[l-1] == coins[l]? (r+1):(l+1);else return coins[r+1] == coins[l]? (r+1):(l+1);}return -1;}// 當剩余長度為1時,需要同時判斷它左右兩邊的元素if (n == 1) {if ((l-1) >= 0 && coins[l-1] != coins[l] && coins[l] != coins[l+1]) return l+1;if ((l-1) < 0 && coins[r+1] != coins[r] && coins[r+2] != coins[r]) return r+1;return -1; // codeslogan}int pos = -1;if (n % 2 == 0) { // 長度為偶數int rr = l+(r-l)/2; // 計算右邊界int left = sum_arr(l, rr);int right = sum_arr(rr+1, r);if (left != right) {pos = dfs(n/2, l, rr);if (pos != -1) return pos;pos = dfs(n/2, rr+1, r);if (pos != -1) return pos;}} else { // 長度為奇數int rr = l+(r-l)/2;int left = sum_arr(l+1, rr);int right = sum_arr(rr+1, r);if (left == right ) {if (coins[l] != coins[l+1]) pos = l + 1;}else {pos = dfs(n/2, l+1, rr);if (pos != -1) return pos;pos = dfs(n/2, rr+1, r);if (pos != -1) return pos;} }return pos; }void PrintOut() {for (auto t: coins) cout << t << ' ';cout << endl; } // 遍歷驗證答案 bool check_ans(int n) {int val = coins[n];int idx;for (int i = 0; i < coins.size(); i++) if (val == coins[i]) {idx = i; break;}if (idx == n) return true;else return false; }int main() {srand((unsigned int)time(NULL));N = rand() % 30 + 3; // 隨機生成[3,33)之間的數,代表n枚硬幣coins.resize(N); make_coins();PrintOut();int pos = dfs(N, 0, N-1);printf("共有%d枚硬幣\n", N);printf("假幣重量為%d,位于第%d個位置\n", coins[pos-1], pos);bool flag = check_ans(pos-1);if (flag) printf("經遍歷驗證,答案正確!\n");else printf("答案錯誤!\n");return 0; }

總結

以上是生活随笔為你收集整理的假币问题 (n枚硬币+未知轻重+DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日日人人人 | 久久午夜精品视频 | 综合免费视频 | 中文字幕一区二区三区在线视频 | 亚洲性图一区二区 | 日日干综合 | 美女四肢被绑在床扒衣 | 中文一区二区 | 初恋视频污| 久久久999视频 | 午夜精品少妇 | 色一区二区三区四区 | 日韩欧美国产精品综合嫩v 国产小毛片 | 黄色小说图片视频 | 国产精品一品二品 | 丁香花高清视频完整电影 | 男人看的网站 | 午夜免费精品 | 久久精品亚洲一区 | 卡通动漫精品一区二区三区 | 久久中文一区 | ass大乳尤物肉体pics | 国产欧美在线观看不卡 | 国产精品丝袜黑色高跟鞋 | 丝袜老师扒开让我了一夜漫画 | 久久乐视频 | 成人午夜一区 | xxxxav| 97免费观看视频 | 波多野结衣av片 | 亚洲精品一区二区三区蜜桃 | 男生女生羞羞网站 | 美女污软件| 亚洲精品白浆高清久久久久久 | 巨乳女教师的诱惑 | 无码人妻一区二区三区免费 | 污污网站免费在线观看 | 国产伦精品一区二区三区视频我 | 在线欧美激情 | 日本中文字幕在线观看视频 | 黄色尤物视频 | 国产伦精品一区二区三区网站 | 欧美另类色图 | 成人国产一区二区三区 | 黄片毛片在线看 | 日本一卡二卡在线 | 国产农村妇女毛片精品久久麻豆 | 国产主播一区二区 | 欧美一区二区三区视频 | ass精品国模裸体pics | 黑人一级| 国产精品无码永久免费不卡 | 国产又爽又黄游戏 | 国产一区在线免费观看 | 成年人视频网站 | 高h全肉污文play带道具 | 中文字幕无线精品亚洲乱码一区 | 天堂视频免费在线观看 | 日韩一级在线观看视频 | 国产人伦精品一区二区三区 | 午夜视频一区 | 懂色一区二区三区免费观看 | 韩日午夜在线资源一区二区 | 91亚洲精华国产精华精华液 | 老外毛片 | 青青视频一区二区 | 999热视频| 国产成人精品一区二区三区 | 日本天堂在线 | 偷拍老头老太高潮抽搐 | 懂色av蜜臀av粉嫩av喷吹 | 深夜免费福利 | 成人欧美一区二区三区小说 | 国产调教视频在线观看 | 播色网 | 国产做爰xxxⅹ高潮视频12p | 亚洲青草视频 | 欧美色图一区二区 | 中文字幕18页 | 秋霞国产一区 | 国产精品传媒在线 | 亚洲天堂av免费在线观看 | 波多野结衣加勒比 | 天天操天天射天天爱 | 4色av| 国产黄色高清视频 | 亚洲av无码专区国产乱码不卡 | 亚洲精品成人电影 | 99国产精品久久久久久久成人 | 成人短视频在线观看 | 精品人妻一区二 | 国产精品高潮呻吟久久av黑人 | 久久综合精品国产二区无码不卡 | 交专区videossex | 在线免费看黄av | 国产又猛又黄 | 91无限观看 | 麻豆极品 | 亚洲 欧美 自拍偷拍 |