편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2022.09.15

    c언어 배열 5의 배수를 지웠는데 실행을 하면 마지막 숫자 12가 나오지 않는다


    
    void main()
    {
        int D[10], i, j, k, N = 10;
    
        srand(0);
        for (i = 0; i < 10; i++) D[i] = rand() % 100;// 난수 설정
        printf("Before : ");
        for (i = 0; i < 10; i++) printf("%d ", D[i]); puts("");
    
        for (i = 0; i < N - 1; i++)// i가  8이 될때 까지 반복
            for (j = i + 1; j < N; j++)// i=0 j = 1부터 n = 10 9반복
                if (D[i] == D[j])
                {
                    remove_element(D, j, &N);// 중복된 수를 제거 D[j] 안에 있는수를 없애기
                    j--;
                }
        remove_5(D, &N);
    
        printf("After : ");
        for (i = 0; i < N; i++) printf("%d ", D[i]);
        puts("");
    }
    
    //void remove_element(int* d, int i, int* n)// d는 배열 i = j n = &N = 10 N의 총량을 없애기
    {
        for (int j = 0; j < *n; j++)
        {
            d[i] = d[i + 1];// 틀린것을 앞에있는 숫자로 바꾸기
            (*n)--;
             i++;
        }
    }
    void remove_5(int* d, int* n)
    {
        for (int i = 0; i < *n; i++)//  5의 배수 또는 5가 들어간 숫자 없애기
        {
            if (d[i] % 5 == 0 || d[i] % 10 == 5)
            {
                d[i] = d[i + 1];
                (*n)--;
            }
        }
    }
    

    배열의 중복 숫자와 5가 들어가는 수 5의 배수를 지웠는데 실행을 하면 마지막 숫자 12가 나오지 않는 이유가 궁금합니다

  • 프로필 주제민님의 편집
    날짜2022.09.15

    c언어 배열 중복 문제입니다.


    void main() { int D[10], i, j, k, N = 10;

    srand(0);
    for (i = 0; i < 10; i++) D[i] = rand() % 100;// 난수 설정
    printf("Before : ");
    for (i = 0; i < 10; i++) printf("%d ", D[i]); puts("");
    
    for (i = 0; i < N - 1; i++)// i가  8이 될때 까지 반복
        for (j = i + 1; j < N; j++)// i=0 j = 1부터 n = 10 9반복
            if (D[i] == D[j])
            {
                remove_element(D, j, &N);// 중복된 수를 제거 D[j] 안에 있는수를 없애기
                j--;
            }
    remove_5(D, &N);
    
    printf("After : ");
    for (i = 0; i < N; i++) printf("%d ", D[i]);
    puts("");
    

    }

    //void remove_element(int* d, int i, int* n)// d는 배열 i = j n = &N = 10 N의 총량을 없애기
    {
        for (int j = 0; j < *n; j++)
        {
            d[i] = d[i + 1];// 틀린것을 앞에있는 숫자로 바꾸기
            (*n)--;
             i++;
        }
    }
    void remove_5(int* d, int* n)
    {
        for (int i = 0; i < *n; i++)//  5의 배수 또는 5가 들어간 숫자 없애기
        {
            if (d[i] % 5 == 0 || d[i] % 10 == 5)
            {
                d[i] = d[i + 1];
                (*n)--;
            }
        }
    }
    

    배열의 중복 숫자와 5가 들어가는 수 5의 배수를 지웠는데 실행을 하면 마지막 숫자 12가 나오지 않는 이유가 궁금합니다