在本教程中,我們必須寫一個演算法來找到一種在不被監考人員發現的情況下通過作業的方法。每個學生都必須向監考人員提交作業。學生 A 的作業是交給學生 B 的,因此學生 B 必須在監考人員注意到的情況下將作業傳回/傳遞給學生 A。
所有學生都坐在隊列中。我們需要找到一種方法將作業傳回給學生A而不被抓到。他們可以透過作業的各種要求如下-
學生A(在索引i 處)可以將作業傳遞給位於索引處的鄰居(i- 1) 和(i 1)
學生可以提交、接受或保留作業。
監考人員正在監視索引[il, rl]中的所有學生。
當學生在監考人員監視範圍內時,他們無法傳送或接收作業。
當學生處於監考人員監視範圍內時,他們無法傳送或接收作業。 p>
如果學生在該範圍內保留作業,監考人員不會發現他們。
我們是給定四個輸入p、q、r、s,其中p 是學生總數,q 是監考員從il 到rl 進行監視的總步數,c 是學生A 的位置,d 是學生A 的位置。學生 B 的位置。
每個步驟 (q) 有三個輸入 -
監考人員監視的總時間給定的範圍。
在最左邊的包含範圍內,監考人員正在觀看。
在最右邊的包含範圍內,監考人員正在觀看。 ,正在觀看。
需要3 個單字的輸出序列:“左”、“右”和“保持”,表示學生的活動(如果他們正在觀看)通過作業(左/右)或保留它。例如,
輸入
8 3 2 7 1 4 6 2 1 8 3 5 6
#
Right Keep Right Right Right Right
解釋
依照這些說明,作業將從索引2 的學生傳到索引7 的學生,而不會被捕獲。
輸入
5 1 1 3 1 2 5
輸出
#Keep Right Right
解釋
依照這些說明,作業將從索引1 的學生傳到索引3 的學生,而不會被捕獲。
在給定實例中,如果監考人員在該範圍內監視,無論是目前正在做作業的學生還是要向其發送作業的學生,那麼該學生將保留和他一起完成那個任務。否則,他將球傳給最終目標方向的相鄰學生。
#include <bits/stdc++.h> using namespace std; void solve(int p, int q, int r, int s, long t[], int l[], int ar[]){ int dir; string val; if (r < s) { dir = 1; val = "Right"; } else { dir = -1; val = "Left"; } string answer = ""; int i = 0, current = r; long tim = 1; while (1) { if (i < q && tim == t[i]) { if ((current >= l[i] && current <= ar[i]) || (current + dir >= l[i] && current + dir <= ar[i])) { answer += "Keep\n"; tim++; i++; continue; } i++; } current += dir; answer += val+"\n"; tim++; if (current == s) break; } cout << answer << endl; } int main(){ int p = 8, q = 3, r = 2, s = 7; long t[q + 2] = { 1,2,3 }; int l[q + 2] = { 4,1,5 }; int ar[q + 2] = { 6,8,6 }; solve(p, q, r, s, t, l, ar); return 0; }
Right Keep Right Right Right Right
#在本教程中,我們學習了編寫一種演算法,以找到一種在不被監考人員發現的情況下透過作業的方法以及C 代碼。我們也可以用java、python和其他語言來寫這段程式碼。上述演算法是競技性編碼競賽的重要演算法。這個問題包含一個現實生活中的問題,我們透過C 程式碼解決了這個問題。我們希望本教學對您有所幫助。
以上是提交C++作業的詳細內容。更多資訊請關注PHP中文網其他相關文章!