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

สร้าง sum-array โดยมีผลรวมขององค์ประกอบในช่วงที่กำหนดใน C++


กำหนดอาร์เรย์ arr[ ] ที่มีเฉพาะจำนวนเต็มและผลรวมเลขคี่ เป้าหมายคือการสร้างอาร์เรย์ผลรวม arr_2[ ] แต่ละองค์ประกอบ arr_2[i] คือผลรวมขององค์ประกอบ sum/2 ก่อนหน้าของ arr[] + arr[i] + องค์ประกอบ sum/2 ถัดไปของ arr[] ถ้าผลรวมเป็น 1 แล้ว arr_2[i]=arr[i]

ตัวอย่าง

อินพุต

arr[] = { 4, 1, 7, 5, 2, 9} sum=3

ผลลัพธ์

Construction of sum-array with sum of elements in given range are: 5 12 13 14
16 17 17 9 3

คำอธิบาย

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1] = 4+1 = 5
arr_2[1]=arr[0]+arr[1]+arr[2] = 4+1+7 = 12
arr_2[2]=arr[1]+arr[2]+arr[3] = 1+7+5 = 13
arr_2[3]=arr[2]+arr[3]+arr[4] = 7+5+2 = 14
arr_2[4]=arr[3]+arr[4]+arr[5] = 5+2+9 = 16
arr_2[5]=arr[4]+arr[5] = 2+9 = 11s

อินพุต

arr[] = { 1,2,3,4,5 } sum=5

ผลลัพธ์

Construction of sum-array with sum of elements in given range are − 6 10 15 14
12

คำอธิบาย

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1]+arr[2] = 1+2+3 = 6
arr_2[1]=arr[0]+arr[1]+arr[2]+arr[3] = 1+2+3+4= 10
arr_2[2]=arr[0]+arr[1]+arr[2]+arr[3]+arr[4] = 1+2+3+4+5 = 15
arr_2[3]=arr[1]+arr[2]+arr[3]+arr[4] = 2+3+4+5= 14
arr_2[4]=arr[2]+arr[3]+arr[4]= 3+4+5 = 12

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

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

  • ใช้อาร์เรย์จำนวนเต็ม arr[] และผลรวมของค่าเป็นอินพุต

  • ฟังก์ชัน sum_array(int arr[], int size, int sum) คืนค่า sum-array พร้อมผลรวมขององค์ประกอบในช่วงที่กำหนด

  • นับเริ่มต้นเป็น 0

  • ใช้อาร์เรย์ผลรวมเป็น arr_2[ขนาด].

  • ใช้ temp =sum / 2 + 1

  • เพิ่มจำนวนชั่วคราวขององค์ประกอบตั้งแต่ 0 ถึง temp เพื่อนับ และกำหนดให้ arr_2[0] เป็นจำนวน

  • สำหรับองค์ประกอบถัดไปของอาร์เรย์ผลรวม ให้ใช้ for loop จาก i=1 ถึง i

  • ใช้ temp_1 =i − (sum / 2) − 1. หากเป็น>=0 ให้ลบ arr[temp_1] ออกจากการนับ

  • ใช้ temp_2 =i + (ผลรวม / 2) ถ้าเป็น

  • ตั้งค่า arr_2[i] =นับ

  • ในตอนท้ายของ for loop เราจะมี arr_2[] เป็นอาร์เรย์ผลรวม

  • พิมพ์ผลรวมอาร์เรย์ arr_2[] โดยใช้ for loop

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
void sum_array(int arr[], int size, int sum){
   int count = 0;
   int arr_2[size];
   int temp = sum / 2 + 1;
   for (int i = 0; i < temp; i++){
      count = count + arr[i];
   }
   arr_2[0] = count;
   for (int i = 1; i < size; i++){
      int temp_1 = i − (sum / 2) − 1;
      if (temp_1 >= 0){
         count = count − arr[temp_1];
      }
      int temp_2 = i + (sum / 2);
      if (temp_2 < size){
         count = count + arr[temp_2];
      }
      arr_2[i] = count;
   }
   cout<<"Construction of sum−array with sum of elements in given range are: ";
   for (int i = 0; i < size; i++){
      cout<< arr_2[i] << " ";
   }
}
int main(){
   int arr[] = { 4, 1, 7, 5, 2, 9, 6, 2, 1 };
   int sum = 3;
   int size = sizeof(arr) / sizeof(int);
   sum_array(arr, size, sum);
   return 0;
}

ผลลัพธ์

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

Construction of sum-array with sum of elements in given range are − 5 12 13 14 16 17 17 9 3