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

รหัส C++ เพื่อนับตัวเลขหลังองค์ประกอบการหารที่มากกว่าครึ่งหนึ่งของขนาดอาร์เรย์


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n เราต้องหาจำนวนเต็ม d ที่ไม่ใช่ศูนย์ เพื่อที่ว่าหลังจากแต่ละตัวเลขในอาร์เรย์หารด้วย d แล้ว จำนวนค่าบวกที่แสดงในอาร์เรย์จะมากกว่าหรือเท่ากับครึ่งหนึ่งของขนาดอาร์เรย์ . หากมีหลายค่าของ d ที่ตรงตามเงื่อนไข หากมีหลายคำตอบ ให้ส่งคืนคำตอบใดคำตอบหนึ่ง

ดังนั้น หากอินพุตเป็นเหมือน A =[10, 0, -7, 2, 6] ผลลัพธ์จะเป็น 4 เพราะที่นี่ n =5 ดังนั้นเราจึงต้องการอย่างน้อย $\mathrm{\left \lceil 5/ 2\right \rceil=3}$ องค์ประกอบหลังการแบ่ง ถ้า d =4 อาร์เรย์หลังการหารจะเป็น [2.5, 0, −1.75, 0.5, 1.5] ซึ่งมีตัวเลขบวก 3 ตัว คือ 2.5, 0.5 และ 1.5

ขั้นตอน

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

z :=0, f :=0n :=size of Afor initialize i :=0 when i  0, แล้ว:(เพิ่ม z ขึ้น 1) ถ้า a <0 แล้ว:(เพิ่ม f ขึ้น 1)if 2 * z>=n แล้ว:คืนค่า 1 มิฉะนั้นเมื่อ 2 * f>=n แล้ว:กลับ -1มิฉะนั้น ให้คืนค่า 0 

ตัวอย่าง

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

#include ใช้เนมสเปซ std;int แก้ (เวกเตอร์ A){ int z =0, f =0; int n =A.size(); สำหรับ (int i =0; i  0) z++; ถ้า (a <0) f++; } if (2 * z>=n) คืนค่า 1; อื่น ๆ ถ้า (2 * f>=n) กลับ -1; else return 0;}int main(){ vector A ={ 10, 0, -7, 2, 6 }; ศาล <<แก้ (A) < 

อินพุต

{ 10, 0, -7, 2, 6 }

ผลลัพธ์

1