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

ค่าสูงสุดของ arr[i] % arr[j] สำหรับอาร์เรย์ที่กำหนดใน C++


ในปัญหานี้ เราจะได้รับอาร์เรย์ของ n องค์ประกอบ งานของเราคือสร้างโปรแกรมที่จะหาค่าสูงสุดของ arr[i]%arr[j] สำหรับอาร์เรย์ที่กำหนด

โดยพื้นฐานแล้ว เราต้องหาค่าของส่วนที่เหลือสูงสุดในขณะที่ทำการหารสององค์ประกอบของอาร์เรย์

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − อาร์เรย์{3, 6, 9, 2, 1}

ผลผลิต − 6

คำอธิบาย

<ก่อน>3%3 =0; 3%6 =3; 3%9 =3; 3%2 =1; 3%1 =06%3 =0; 6%6 =0; 6%9 =6; 6%2 =0; 6%1 =09%3 =0; 9%6 =3; 9%9 =0 9%2 =1; 9%1 =02%3 =2; 26% =2; 2%9 =2; 2%2 =0; 2%1 =01%3 =1; 1%6 =1; 1%9 =1; 1%2 =1; 1 %1 =0จากส่วนที่เหลือด้านบนสุดคือ 6

ดังนั้น วิธีการโดยตรงในการหาคำตอบคือการคำนวณส่วนที่เหลือสำหรับแต่ละคู่และหาค่าสูงสุดของทุกคู่ แต่วิธีนี้จะไม่ได้ผลเนื่องจากถึงเวลาที่ความซับซ้อนจะอยู่ในลำดับ n 2 .

ดังนั้น วิธีแก้ปัญหาที่มีประสิทธิภาพจะใช้ตรรกะที่ว่าค่า x%y จะสูงสุดเมื่อ y>x ส่วนที่เหลือจะเป็น x และจากองค์ประกอบทั้งหมดของอาร์เรย์ ถ้าเรานำองค์ประกอบสูงสุดสององค์ประกอบ ผลลัพธ์จะเป็นค่าสูงสุด สำหรับสิ่งนี้ เราจะจัดเรียงอาร์เรย์แล้ววนซ้ำองค์ประกอบสุดท้ายและที่สองเพื่อให้ได้ผลลัพธ์

ตัวอย่าง

โปรแกรมเพื่อแสดงการใช้งานโซลูชันของเรา

#include ใช้เนมสเปซ std;int maxRemainder(int arr[], int n){ bool hasSameValues ​​=true; for(int i =1; i 

ผลลัพธ์

ส่วนที่เหลือสูงสุดในการหารสององค์ประกอบของอาร์เรย์คือ 6