철가방

xrp999.egloos.com

포토로그



주말 아침 C언어 문제 프로그래밍 리부팅

 
대학교 1학년 c언어 수업 실습 시험 마지막 문제 ㅎㅎ
http://sjc333.egloos.com/3030936

//index----------0  1  2  3  4  5  6  7  8  9
int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, 9};

이런 배열이 주어질 때, 0번 인덱스 부터 읽는다.
예로 주어진 배열에 0번에는 5가 들어가있다. 그러면 다음에는 5번 인덱스를 읽는다.
5번 인덱스에는 2가 저장되어 있다. 그러면 다음에는 2번 인덱스를 읽는다.
이렇게 하여 9번 인덱스를 읽을 때 까지 반복하는 반복문을 작성하라.
인덱스를 읽은 순서를 출력하여야 한다. 마지막 9번 인덱스가 저장하는 값까지 출력해야 한다.
예) 0, 5, 2, 1, 3, 6, 9, 9

주어지는 배열은 항상 길이가 10이다.

배열을 입력하는 방법은 없다. 그냥 소스 코드에 입력된 상태로 사용한다.

무한 루프를 도는 것을 check해서 중간에 빠져나오면 가산점을 준다.

*/

#include <stdio.h>

int main(int argc,char **argv)
{
    int array[10] = {5, 3, 1, 6, 4, 2, 9, 7,  8, 9};
    //int array[10] = {5, 3, 1, 6, 4, 2, 9, 7,  8, -9};  //test index Error
    //int array[10] = {5, 3, 1, -6, 4, 2, 9, 7, 8,  9};  //test index Error
    //int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, 99};  //test index Error
    //int array[10] = {1, 3, 5, 6, 4, 2, 1, 7, 8, 9}; //test 무한
    //int array[10] = {5, 3, 1, 6, 4, 2, 0, 7, 8, 9}; //test 무한
    //int array[10] = {5, 3, 0, 6, 4, 2, 9, 7, 8, 9}; //test 무한

    int index_i=0;
    int check_n[10]={0,};
    
    printf("0");
    while(1){
       
        switch(index_i)
        {
            case 0:
                if(check_n[0] == 1)
                    goto end;

                printf(", %d",array[index_i]);
                index_i =array[index_i];
                    check_n[0] = check_n[0] + 1;
            break;

           case 1:
                if(check_n[1] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[1] = check_n[1] + 1;
            break;

            case 2:
                if(check_n[2] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
               check_n[2] = check_n[2] + 1;
            break;

            case 3:
                if(check_n[3] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[3] = check_n[3] + 1;
            break;

            case 4:
                if(check_n[4] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[4] = check_n[4] + 1;
            break;

            case 5:
                if(check_n[5] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[5] = check_n[5] + 1;
            break;

            case 6:
                if(check_n[6] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
               check_n[6] = check_n[6] + 1;
            break;

            case 7:
              if(check_n[7] == 1)
                    goto end;
              
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[7] = check_n[7] + 1;
            break;

            case 8:
                if(check_n[8] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
               check_n[8] = check_n[8] + 1;
            break;

            case 9:
                if(check_n[9] == 1)
                    goto end;
               
                printf(", %d",array[index_i]);
                index_i =array[index_i];
                check_n[9] = check_n[9]+1;
            break;

            default:
                printf("\n index_i => %d \n",index_i);
                goto error;
        }
       
    }

end:
    printf("\nGood day...\n");
    return 0;

error:
    printf("\n error...\n");
    return 0;




코딩시간 9시부터 ~ 11시쯤
역시 가상코딩과 직접 짜보니
생각했던 것 보다 어렵군요 처음문제를 잘못
풀고 실력부족으로 소스코드도 지저분 합니다.

즐거운 주말이니 이제 몬스타 재방송이나 ~

아래는 주인장 님에 답안 (요게 더 깔끔함)
http://pds26.egloos.com/pds/201306/14/99/main.cpp


#include <stdio.h>
void main()
{
    printf("hi\n");

    //index----------0  1  2  3  4  5  6  7  8  9
    //int array[10] = {5, 3, 0, 6, 4, 2, 9, 7, 8, 9};//무한
    int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, 9};//정상
    int check[10];
    for(int a=0; a<10; a++) check[a]=0;

    printf("0");
    {
        int a=0;
        while(1)
        {
            printf(", %d", array[a]);
            if(a==9)break;
            check[a]=1;
            a=array[a];
            if(check[a]==1)
            {
                printf("무한 루프 발견\n");
                break;
            }
        }
        printf("\n");
    }
}



요건 수달님이 리플 달아 주신 코드
깔끔하네요

#include <stdio.h>
int main(int argc,char **argv)
{

int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, 9};
//int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, -9};
//int array[10] = {5, 3, 1, -6, 4, 2, 9, 7, 8, 9}; //test index Error
//int array[10] = {5, 3, 1, 6, 4, 2, 9, 7, 8, 99}; //test index Error
//int array[10] = {1, 3, 5, 6, 4, 2, 1, 7, 8, 9}; //test 무한
//int array[10] = {5, 3, 1, 6, 4, 2, 0, 7, 8, 9}; //test 무한
//int array[10] = {5, 3, 0, 6, 4, 2, 9, 7, 8, 9}; //test 무한

int arraycheck[10] = {0,};
int i = 0;

while (i != 9)
{
   if (i < 0 || i > 9)
   {
     printf("wrong index! \n");
     break;
   }
  
   if (arraycheck[i] != 0)
   {
     printf(" \nloop! \n");
     break;
   }

   printf("< array[%d] : %d > ", i, array[i]);
   arraycheck[i] = 1;
   i = array[i];
}

   printf("Goodby : %d \n", i);
}