Heim > Backend-Entwicklung > C++ > Was sind die aktiven und inaktiven Zellen nach k Tagen?

Was sind die aktiven und inaktiven Zellen nach k Tagen?

PHPz
Freigeben: 2023-08-25 15:57:06
nach vorne
1077 Leute haben es durchsucht

Was sind die aktiven und inaktiven Zellen nach k Tagen?

Hier sehen wir eine interessante Frage. Angenommen, Sie erhalten ein binäres Array der Größe n. Hier ist n > 3. Der Wert „true“ oder „1“ gibt den aktiven Status an, während der Wert „0“ oder „false“ den inaktiven Status angibt. Eine weitere Zahl k ist ebenfalls angegeben. Wir müssen nach k Tagen aktive oder inaktive Zellen finden. nach jedem Mal Der Tagesstatus der i-ten Zelle ist aktiv, wenn die linke und rechte Zelle nicht identisch sind, und inaktiv, wenn sie identisch sind. Es gibt keine Zellen vor oder nach den Zellen ganz links und rechts. Daher sind die Zellen ganz links und ganz rechts immer 0.

Schauen wir uns ein Beispiel an, um diese Idee zu verstehen. Angenommen, ein Array sieht aus wie {0, 1, 0, 1, 0, 1, 0, 1} mit dem Wert k = 3. Mal sehen, wie es sich von Tag zu Tag verändert.

  • Nach 1 Tag ist das Array {1, 0, 0, 0, 0, 0, 0, 0}
  • Nach 2 Tagen ist das Array {0, 1, 0, 0, 0, 0 , 0, 0 }
  • Nach 3 Tagen ist das Array {1, 0, 1, 0, 0, 0, 0, 0}

Also 2 aktive Zellen und 6 inaktive Zellen

Algorithmus

activeCellKdays( 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
Nach dem Login kopieren

Beispiel

#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);
}
Nach dem Login kopieren

Ausgabe

Active Cells = 2, Inactive Cells = 6
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas sind die aktiven und inaktiven Zellen nach k Tagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage