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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP