Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그램으로 여러 범위 증가 연산 후 변경된 배열 출력하기


정수 m개로 이루어진 배열 arr[m]과, 배열의 각 요소에 더할 값 n이 주어집니다. 또한 시작 인덱스와 끝 인덱스를 담고 있는 r개의 쿼리가 제공되며, 각 쿼리마다 해당 범위(시작부터 끝까지)의 모든 배열 요소에 값 n을 더한 후 결과 배열을 출력해야 합니다.

예제

입력:
arr[] = {1, 2, 3, 4, 5}
query[] = { { 0, 3 }, { 1, 2 } }
n = 2
출력:
위 프로그램을 실행하면 다음과 같은 결과가 생성됩니다:
Query1: { 3, 4, 5, 6, 5 }
Query2: { 3, 6, 7, 6, 5 }

이 문제는 비교적 간단한 접근 방식으로 해결할 수 있습니다.

  • 주어진 모든 쿼리를 순회하면서, 각 쿼리에 저장된 시작 지점부터 끝 지점까지 배열을 탐색합니다.
  • 해당 범위의 요소에 값 n을 더한 뒤, 배열 전체를 출력합니다.

알고리즘

START
STEP 1 : 시작(start)과 끝(end) 범위를 저장할 구조체 range 선언
STEP 2 : 함수 add_tomatrix(int arr[], struct range r[], int n, int size, int m)에서
   int i, j, k;
   FOR i = 0 AND i < m AND i++ 반복
      FOR j = r[i].start AND j <= r[i].end AND j++ 반복
         arr[j] = arr[j] + n
      END FOR
      FOR k = 0 AND k < size AND k++ 반복
         PRINT arr[k]
      END FOR
   END FOR
STOP

예제 코드

#include <stdio.h>
struct range{
   int start, end; // 배열 요소의 범위를 지정하기 위한 구조체
};
int add_tomatrix(int arr[], struct range r[], int n, int size, int m){
   int i, j, k;
   for ( i = 0; i < m; i++){ // 정의된 구조체의 모든 쿼리에 대해 반복
      for(j = r[i].start; j<= r[i].end; j++){ // 업데이트할 범위의 시작부터 끝까지
         arr[j] += n; // 해당 범위의 요소에 값 n을 더함
      }
      printf("Query %d:", i+1);
      for ( k = 0; k < size; k++){
         printf(" %d",arr[k]); // 매 쿼리 실행 후 전체 배열 출력
      }
      printf("\n");
   }
}
int main(int argc, char const *argv[]){
   int arr[] ={3, 4, 8, 1, 10};
   struct range r[] = {{0,2}, {1, 3}, {3, 4}};
   int n = 2;
   int size = sizeof(arr)/sizeof(arr[0]);
   int m = sizeof(r)/sizeof(r[0]);
   add_tomatrix(arr, r, n, size, m);
   return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 생성됩니다.

Query 1: 5 6 10 1 10
Query 2: 5 8 12 3 10
Query 3: 5 8 12 5 12