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

Tìm thời gian cần thiết để tín hiệu đến tất cả các vị trí trong một chuỗi - C ++

Trong hướng dẫn này, chúng ta sẽ viết một chương trình tính toán thời gian cần thiết để một tín hiệu đến được tất cả các vị trí trong một chuỗi. Hãy để tôi giải thích nó bằng một ví dụ.

Chúng tôi sẽ có một chuỗi chỉ chứa s p nhân vật. s là một tín hiệu p là một vị trí trong chuỗi. Tín hiệu bắt đầu lúc s và đi theo cả hai hướng trái và phải. Chúng tôi giả định rằng phải mất một đơn vị thời gian để di chuyển đến vị trí tiếp theo trong chuỗi. Nhiệm vụ của chúng tôi là tính toán thời gian cần thiết để chuyển đổi tất cả các vị trí thành tín hiệu .

Hãy xem một số ví dụ.

Đầu vào - pppppspss

Đầu ra - 5

Đầu vào - pspspsps

Đầu ra - 1

Đầu vào - ssssss

Đầu ra - 0

Hãy xem các bước liên quan để giải quyết vấn đề.

  • Khởi tạo một chuỗi và thời gian (0)

  • Lặp lại chuỗi.

    • Đếm p liên tục ký tự và lưu trữ số lượng trong một biến.

    • Nếu ký tự hiện tại là s p số lượng lớn hơn lần trước, sau đó kiểm tra xem s có ở bên trái hay không.

    • Nếu s hiện diện ở cả hai bên, sau đó chia số lượng thành hai nửa dưới dạng s có thể đi theo cả hai hướng.

    • Đặt lại số lượng p .

Ví dụ

Hãy xem mã.

#include <bits/stdc++.h>
using namespace std;
int timeToConvertToSignalString(string sample_string, int string_len) {
   int p_count = 0, time = 0;
   for (int i = 0; i <= string_len; i++) {
      if (sample_string[i] == 'p') {
         p_count++;
      }
      else {
         if (p_count > time) {
            bool is_present_left_side = false;
            if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) {
               is_present_left_side = 1;
            }
            if (is_present_left_side) {
               p_count = ceil((double)p_count / 2);
            }
            time = max(time, p_count);
         }
         p_count = 0;
      }
   }
   return time;
}
int main() {
   string sample_string = "pppppspss";
   int n = sample_string.size();
   cout << timeToConvertToSignalString(sample_string, n) << endl;
   return 0;
}

Đầu ra

Nếu bạn thực hiện chương trình trên, bạn sẽ nhận được kết quả sau.

5

Hãy thử chạy chương trình với một trường hợp khác và kiểm tra nó.

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.