C++程式:查詢環形站立人員中的對手


假設我們有三個數字a、b和c。有k個學生(k為偶數)站在一個圓圈上,他們按順時針方向從1到k編號。我們不知道k的值。每個人都透過圓的中心觀察,可以看到站在圓圈另一側的對手。編號為'a'的人看著編號為'b'的人。我們必須找到哪個人的位置與編號為'c'的人相對。如果找不到,則返回-1。

問題類別

程式設計中的各種問題可以透過不同的技術來解決。要解決一個問題,我們首先必須設計一個演算法,為此我們必須詳細研究特定問題。如果同一個問題反覆出現,可以使用遞迴方法;或者,我們也可以使用迭代結構。可以使用if-else和switch case等控制語句來控制程式中邏輯的流程。有效地使用變數和資料結構可以提供更簡單的解決方案以及輕量級、低記憶體需求的程式。我們必須檢視現有的程式設計技術,例如分治法、貪婪程式設計、動態規劃,並找出它們是否可以。這個問題我們可以用一些數學邏輯來解決。請遵循以下內容以更好地理解這種方法。

因此,如果我們問題的輸入類似於a = 6;b = 2;c = 4,則輸出將為8,因為圓圈中有8個學生。編號為6的學生會看到編號為2的學生,而編號為8的學生會看到編號為4的學生。

步驟

要解決這個問題,我們將遵循以下步驟:

n := |a - b|
if a > n or b > n or c > n, then:
   return -1
Otherwise
   return (n / 2 + c - 1) mod n + 1

示例

讓我們來看下面的實現,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(int a, int b, int c){
   int n = abs(a - b) * 2;
   if (a > n || b > n || c > n)
      return -1;
   else
      return (n / 2 + c - 1) % n + 1;
}
int main(){
   int a = 6;
   int b = 2;
   int c = 4;
   cout << solve(a, b, c) << endl;
}

輸入

6, 2, 4

輸出

8

更新於:2022年4月8日

瀏覽量:108

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.