เราได้รับด้วยจำนวนเต็มบวก 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;i 0){ 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