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

นับจำนวนการดำเนินการที่จำเป็นในการลดจำนวนที่กำหนดใน C++


เราได้รับด้วยจำนวนเต็มบวก K และอาร์เรย์ Ops[] ที่มีจำนวนเต็ม เป้าหมายคือการหาจำนวนการดำเนินการที่จำเป็นในการลด K เพื่อให้น้อยกว่า 0 การดำเนินการคือ -

  • การดำเนินการแรกคือ K + Ops[0] องค์ประกอบแรกที่เพิ่มไปยัง K

  • หลังจาก 1. เพิ่ม Ops[i] ถึง K จนถึง K<0. โดยที่ดัชนี i ยังคงเปลี่ยนแปลงในลักษณะเป็นวงกลม0<=i

หมายเหตุ − เพิ่ม Ops[i] ต่อไปจนถึง K<0 ถ้าฉันไปถึงองค์ประกอบสุดท้าย Ops[N-1] ให้เริ่มจาก i=0 อีกครั้ง ในลักษณะเป็นวงกลม

ก่อนอื่นเราจะตรวจสอบว่าผลรวมขององค์ประกอบทั้งหมดของอาร์เรย์ Ops[]>0 หรือไม่ ถ้าใช่ K ก็ไม่สามารถลดลงได้ กลับ -1. ไม่เช่นนั้นให้เพิ่ม Ops[i] ไปที่ K และตรวจสอบว่า K<0 ถ้าใช่ ทำลายลูปหรือไม่

จำนวนการดำเนินการที่เพิ่มขึ้นหลังจากเพิ่ม:K+Ops[i].

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล

ops[]={ -4,2,-3,0,2 }, K=5

ผลผลิต − จำนวนการดำเนินการที่จำเป็นในการลดจำนวน − 3

คำอธิบาย − K คือ 5 การดำเนินการคือ -

<ก่อน>1. K+ops[0]=5+(-4) =12. K+ops[1]=1+2 =33. K+ops[2]=3+(-3) =0

ป้อนข้อมูล

ops[]={ 5,5,3,-2 }, K=10

ผลผลิต − K ลดไม่ได้!!

คำอธิบาย −K คือ 10 การดำเนินการคือ −

<ก่อน>1. K+ops[0]=10+5=152. K+ops[1]=15+5=203. K+ops[2]=20+3=234. K+ops[3]=23+-2 =225. K+ops[0]=22+5=276. K+ops[1]=27+5=327. …………………

หากเราตรวจสอบผลรวมขององค์ประกอบทั้งหมดก่อน[]=5+5+3-2=11 และ 11+10 จะเป็น +ve เสมอ ดังนั้น K ไม่สามารถลดลงเป็น −0 ได้

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้ integer array ops[] ที่เริ่มต้นด้วยจำนวนเต็มแบบสุ่ม

  • ตัวแปร K มีค่าเป็นบวก

  • ฟังก์ชั่น countOperations(int op[], int n, int k) รับ K array Ops[] และความยาวเป็นพารามิเตอร์และส่งคืนการดำเนินการที่จำเป็นเพื่อลด K ให้น้อยกว่า 0

  • นับจำนวนการดำเนินการเริ่มต้นเป็น 0

  • คำนวณผลรวมขององค์ประกอบของ ops[] และเก็บไว้ในผลรวม ถ้า sum>=0 ให้คืนค่า -1

  • ถ้าไม่ใช่ในขณะที่ k>0 ให้เพิ่ม ops[i] และเพิ่มจำนวน ถ้า k<0 วงแตก

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#include ใช้เนมสเปซ std;long countOperations(int op[], int n, int k){ นับแบบยาว =0; int sum=0; int i=0; สำหรับ(int i=0;i=0) { return -1; } //number k ไม่สามารถลดลงได้เนื่องจาก sum-k เป็นค่าบวกเสมอหรือ 0 while(k>0){ for(i=0;i0){ count++; k+=op[i]; } อื่น ๆ { แตก; } } } จำนวนการส่งคืน;}int main(){ int Ops[] ={ 1,-1,5,-11}; int len=sizeof(ปฏิบัติการ) / sizeof(Ops[0]); int K=10; ยาว ans=countOperations(Ops,len,K); if(ans==-1) { cout<<"K ไม่สามารถลดลงได้!!"; } อื่น ๆ { cout<<"จำนวนการดำเนินการ :"<<อัน; } return 0;}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

จำนวนการดำเนินงาน :8