Computer >> Máy Tính >  >> Lập trình >> C ++

In hướng di chuyển sao cho bạn ở trong ranh giới [-k, + k] trong C ++

Trong vấn đề này, chúng ta phải tìm một cách hợp lệ để di chuyển theo hướng tích cực hoặc theo hướng tiêu cực sao cho chúng ta ở trong một giới hạn nhất định do người dùng cung cấp.

Ở đây, Chúng ta được cung cấp một giới hạn tối đa nhất định K, là giá trị lớn nhất mà chúng ta có thể di chuyển và một mảng gồm n giá trị dương để di chuyển. Chúng ta phải trả về chuỗi, tức là các hướng di chuyển tích cực hoặc tiêu cực để nó không bao giờ vượt qua giá trị K.

Hãy lấy một ví dụ để hiểu chủ đề tốt hơn,

Input : K = 56 and the array is [25 , 14 , 31 , 16 , 5].
Output : positive positive negative positive positive.

Giải thích

Đầu tiên, chúng tôi sẽ kiểm tra xem 0 + a [0] =0 + 25 =25 <56 có hay không, sau đó chúng tôi sẽ di chuyển theo hướng tích cực.

Bây giờ, chúng ta sẽ kiểm tra nếu 25 + a [1] =25 + 14 =39 <56 có, thì chúng ta sẽ chuyển động theo hướng tích cực.

Bây giờ, chúng ta sẽ kiểm tra xem 29 + a [2] =39 + 31 =70 <56 Không, sau đó chúng ta sẽ kiểm tra nếu 39 - a [2] =39 - 31 =8> 0 thì chúng ta sẽ chuyển động theo chiều âm. .

chúng ta sẽ kiểm tra nếu 8 + a [3] =8 + 16 =24 <56 có, thì chúng ta sẽ chuyển động theo hướng tích cực.

chúng ta sẽ kiểm tra nếu 16 + a [4] =16 + 5 =21 <56 có, thì chúng ta sẽ chuyển động theo hướng tích cực.

Vì vậy, bây giờ chúng ta hãy tạo logic để giải quyết vấn đề này. Chúng ta phải kiểm tra xem chuyển động theo hướng tích cực có đạt đến giới hạn hay không. Nếu không, sau đó chuyển động theo hướng tích cực. Nếu không, hãy kiểm tra xem di chuyển theo hướng tiêu cực có đạt đến giới hạn dưới hay không, tức là 0. Nếu không, hãy di chuyển theo hướng tiêu cực. Nếu cả hai đều Có thì không thể trả lại.

Dựa trên logic này, thuật toán mà chúng tôi phải tuân theo để tạo mã của mình là -

Thuật toán

Initially set position to 0.
Step 1 : for i -> 0 to n , n is the length of array. Follow step 2 - 4.
Step 2 : if initial_postition + a[i] < K, initial_position + = a[i]. Print “POSITIVE”.
Step 3 : else if initial_postition - a[i] > 0, initial_position - = a[i]. Print “NEGATIVE”.
Step 4 : else , print “NO MORE VALID MOVES”.

Ví dụ

Bây giờ, hãy tạo một chương trình để hiển thị việc triển khai thuật toán để giải quyết vấn đề,

#include <iostream>
using namespace std;
void StepsTaken(int a[], int n, int k){
   string res = "";
   int position = 0;
   int steps = 1;
   for (int i = 0; i < n; i++) {
      if (position + a[i] <= k && position + a[i] >= (-k)) {
         position += a[i];
         cout<<"POSITIVE \t";
      }
      else if (position - a[i] >= -k && position - a[i] <= k) {
         position -= a[i];
         cout<<"NEGATIVE \t";
      } else {
         cout << -1;
         return;
      }
   }
   cout << res;
}
int main(){
   int a[] = { 12 , 24 , 9 , 17 , 8};
   int n = sizeof(a) / sizeof(a[0]);
   int k = 40;
   StepsTaken(a, n, k);
   return 0;
}

Đầu ra

POSITIVE    POSITIVE    NEGATIVE
      NEGATIVE    POSITIVE