Apakah sel yang aktif dan tidak aktif selepas k hari?

PHPz
Lepaskan: 2023-08-25 15:57:06
ke hadapan
1051 orang telah melayarinya

Apakah sel yang aktif dan tidak aktif selepas k hari?

Di sini kita akan melihat soalan yang menarik. Katakan anda diberi tatasusunan binari saiz n. Di sini n > 3. Nilai benar atau 1 menunjukkan status aktif, dan nilai 0 atau salah menunjukkan status tidak aktif. Satu lagi nombor k juga diberikan. Kita perlu mencari sel aktif atau tidak aktif selepas k hari. selepas setiap masa Status siang hari sel ke-i adalah aktif jika sel kiri dan kanan tidak sama, dan tidak aktif jika ia sama. Tiada sel sebelum atau selepas sel paling kiri dan paling kanan. Oleh itu, sel paling kiri dan paling kanan sentiasa 0.

Mari kita lihat contoh untuk memahami idea ini. Katakan tatasusunan kelihatan seperti {0, 1, 0, 1, 0, 1, 0, 1} dengan nilai k = 3. Mari kita lihat bagaimana ia berubah dari hari ke hari.

  • Selepas 1 hari, tatasusunan akan menjadi {1, 0, 0, 0, 0, 0, 0, 0}
  • Selepas 2 hari, tatasusunan akan menjadi {0, 1, 0, 0, 0, 0 , 0, 0 }
  • Selepas 3 hari, tatasusunan akan menjadi {1, 0, 1, 0, 0, 0, 0, 0}

Jadi 2 sel aktif dan 6 sel tidak aktif

Algoritma

aktif(ellKdaysC arr , n, k)

begin
   make a copy of arr into temp
   for i in range 1 to k, do
      temp[0] := 0 XOR arr[1]
      temp[n-1] := 0 XOR arr[n-2]
      for each cell i from 1 to n-2, do
         temp[i] := arr[i-1] XOR arr[i+1]
      done
      copy temp to arr for next iteration
   done
   count number of 1s as active, and number of 0s as inactive, then return the values.
end
Salin selepas log masuk

Contoh

#include <iostream>
using namespace std;
void activeCellKdays(bool arr[], int n, int k) {
   bool temp[n]; //temp is holding the copy of the arr
   for (int i=0; i<n ; i++)
      temp[i] = arr[i];
   for(int i = 0; i<k; i++){
      temp[0] = 0^arr[1]; //set value for left cell
      temp[n-1] = 0^arr[n-2]; //set value for right cell
      for (int i=1; i<=n-2; i++) //for all intermediate cell if left and
         right are not same, put 1
      temp[i] = arr[i-1] ^ arr[i+1];
      for (int i=0; i<n; i++)
         arr[i] = temp[i]; //copy back the temp to arr for the next iteration
   }
   int active = 0, inactive = 0;
   for (int i=0; i<n; i++)
      if (arr[i])
         active++;
      else
         inactive++;
   cout << "Active Cells = "<< active <<", Inactive Cells = " << inactive;
}
main() {
   bool arr[] = {0, 1, 0, 1, 0, 1, 0, 1};
   int k = 3;
   int n = sizeof(arr)/sizeof(arr[0]);
   activeCellKdays(arr, n, k);
}
Salin selepas log masuk

Output

Active Cells = 2, Inactive Cells = 6
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah sel yang aktif dan tidak aktif selepas k hari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan