Rumah >pembangunan bahagian belakang >C++ >Apakah sel yang aktif dan tidak aktif selepas k hari?

Apakah sel yang aktif dan tidak aktif selepas k hari?

PHPz
PHPzke hadapan
2023-08-25 15:57:061093semak imbas

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

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);
}

Output

Active Cells = 2, Inactive Cells = 6

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam