작성일 : 13-09-03 10:53
이문제가 안풀려요..ㅠㅠ 간단하게라도 설명부탁드립니다.
 글쓴이 : 우근영(orange7619)
조회 : 5,264  

30.다음 프로그램의 출력 결과는 무엇인가?

int a[15] = {0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1};

void f(int n) {
    if (n >= 15) return;
    if (a[n] != 1) return;
    a[n] = 2;
    f(n + 1);
}
int main() {
  int i, g;
  g = 0;
  for (i = 0; i < 15; i++) {
      if (a[i] == 1) {
           f(i);
           g = g + 1;
       }
    }
   
printf("%d\n", g);
    return 0;
}

너무 궁금해서잠도 못자겠어요 ㅠㅠ 간략하게라도 설명좀 부탁드립니다.


컴스쿨 13-09-03 15:29
 
#include <stdio.h>

int a[15] = {0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1};

void f(int n) {
    if (n >= 15) return; //범위를 벗어나면 중단
    if (a[n] != 1) return; //해당 위치가 1이 아니면 중단
    a[n] = 2; //1을 2로 바꾸고
    f(n + 1); //다음의 위치 호출
}
int main() {
  int i, g;
  g = 0;
  for (i = 0; i < 15; i++) {
      if (a[i] == 1) {
          f(i);
          g = g + 1;
      }
    }
    printf("%d\n", g);
    return 0;
}

a 배열에서 연속된 1의 묶음이 몇개인지 구하는 프로그램입니다.

i가 1일때 f(1)을 호출하게 되면 a[1]을 2로 바꾸고
다시 f(2)를 호출하여 a[2]를 2로 바꾸고
다시 f(3)을 호출하는데 a[3]은 1이 아니므로 return 하여 중단하게 됩니다.
그리고 g는 1이 증가하여 한 묶음을 표시합니다.

i가 2일때에는 이미 a[2]가 2로 바뀌어 있으므로 함수를 호출하지 않습니다.
그리고 i가 4일때 a[4]는 1이므로 함수를 호출하게 됩니다.

같은 방법으로 i가 7,9,13일때 각각 함수를 호출하여 처리한후 g가 증가하게 됩니다.
따라서 g에는 앞에서 연속되지 않은 1의 개수를 구하게 되는 것이며 위의 경우에는 5가 출력되게 됩니다.
우근영 13-09-03 15:35
 
너무 감사합니다 ㅠㅠ
 
 

Total 665
번호 제   목 글쓴이 날짜 조회
165 일련번호가 틀렸대요 (1) 허준 09-18 5643
164 초등부 예선 답안지 (1) 이신영 09-15 10713
163 결제오류건 (1) 김효중 09-11 5271
162 자기주도 C언어 책을 구매해 강의를 듣고 싶은데 번호가 누락… (1) 양성철 09-10 5508
161 자기주도 c언어 프로그래밍 2단원 형성평가문제 1번 답이 궁금 (1) 우강민 09-08 10916
160 기출문제 정답지 (1) 이신영 09-08 6609
159 일련번호 누락;; 재질문 (1) 신웅환 09-08 5377
158 이문제가 안풀려요..ㅠㅠ 간단하게라도 설명부탁드립니다. (2) 우근영 09-03 5265
157 일련번호 누락 (1) 신웅환 08-25 5318
156 자기주도 c 언어 결제요 (1) 양찬우 08-08 5690
155 2012년 전국 본선문제 관련 Q. (1) 이윤상 07-23 5690
154 이해가안되서 질문드립니다ㅠㅜ (4) 양창욱 07-15 5895
153 자기주도 c언어 일련번호&내용 관련 문의 입니다. (1) 안상재 07-14 6131
152 질문입니다.~ (1) 신철 07-04 5732
151 이것도 이해가 안됩니다.ㅠ.ㅠ (1) 신철 07-04 5676
150 안녕하세요~올림피아드 문제는 아니구요~ 풀다가 이해가 안되네… (1) 신철 07-04 6027
149 자가진단과 형성평가 소스는 없나요? (1) 박대성 06-25 6755
148 정보올림피아드 지역본선에서요~ (1) 최원미 06-20 6280
147 자기주도 C에서 4강이 안 열려요 (1) 박대성 06-16 5652
146 정보올림피아드 2012년 소스파일은 없나요? (1) 최원미 06-14 7422
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    

회사소개 | 개인정보처리방침 | 이용약관 | 찾아오시는 길 | 이메일주소 무단수집거부 | 사업자정보확인
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호 한컴에듀케이션(주) TEL : 031-388-8840 FAX : 031-388-0996
대표자 : 김동규 사업자번호 : 130-86-02870 통신판매업신고번호 : 제 2010-경기안양-888호
COPYTIGHT(C) 한컴에듀케이션(주), ALL RIGHT RESERVED.
담은강좌 : 0