Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ นับจำนวนขั้นตอนในการหาผลรวมและผลิตภัณฑ์ต่างจากศูนย์


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ในการดำเนินการเดียว เราสามารถเพิ่ม 1 ด้วยองค์ประกอบที่กำหนดไว้ล่วงหน้าใน A หากผลรวมหรือผลคูณขององค์ประกอบทั้งหมดในอาร์เรย์มีค่าเท่ากับศูนย์ เราสามารถทำการดำเนินการนี้ได้อีกครั้ง เราต้องนับจำนวนขั้นตอนขั้นต่ำที่จำเป็นเพื่อให้ทั้งผลรวมและผลิตภัณฑ์ขององค์ประกอบทั้งหมดในอาร์เรย์แตกต่างจากศูนย์หรือไม่

ดังนั้น หากอินพุตเป็น A =[-1, 0, 0, 1] ผลลัพธ์จะเป็น 2 เพราะทั้งผลคูณและผลรวมเป็น 0 หากเราบวก 1 เข้ากับองค์ประกอบที่สองและองค์ประกอบที่สาม อาร์เรย์จะ เป็น [-1,1,1,1] ผลรวมจะเท่ากับ 2 และผลคูณจะเท่ากับ -1

ขั้นตอน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

sum := 0
cnt := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   x := A[i]
   sum := sum + x
   cnt := cnt + (if x is same as 0, then 1, otherwise 0)
return (if sum + cnt is same as 0, then cnt + 1, otherwise cnt)

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int> A) {
   int sum = 0, cnt = 0;
   int n = A.size();
   for (int i = 0; i < n; i++) {
      int x = A[i];
      sum += x;
      cnt += x == 0 ? 1 : 0;
   }
   return sum + cnt == 0 ? cnt + 1 : cnt;
}
int main() {
   vector<int> A = { -1, 0, 0, 1 };
   cout << solve(A) << endl;
}

อินพุต

{ -1, 0, 0, 1 }

ผลลัพธ์

2