편집 기록

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

    c언어 : 입력된 숫자의 횟수 세기 문제


    안녕하세요 문제를 풀던중 2일동안 고민해도 더이상 안풀려서 문제의 원인을 찾고자 질문합니다.

    문제 설명

    0에서 9까지의 정수만 1000개를 입력받아,

    각각의 정수가 입력된 횟수를 모두 출력하고,

    그 중 가장 많이 입력받은 수와 그 개수를 출력하시오.

    배열은 반드시 0으로 초기화하여 사용하시오.

    입력 형식

    공백으로 구분된 0부터 9까지의 정수 (그 외의 값은 들어오지 않는다고 가정할 것)

    출력 형식

    0-9까지, 각 정수를 출력하고, colon 을 넣은 후, 5칸에 우측정렬된 정수형으로 출력하고 개행문자로 구분하시오.

    그 이후, 가장 많이 입력받은 수와 그 개수를 정수형으로 각각 개행문자를 추가해 출력할 것

    #include<stdio.h>
    #define size 1000
    
    int main() 
    {   
        int num[size] = { 0, },count[10][2] = { 0, }, Array[10] = { 0, };//배열 초기화
        int i,j,k=0;
        int a,b,temp;
        int frequency_number, frequency = 0;//빈도수를 나타내는 변수
    
        for (i = 0; i < size; i++)//배열의 크기만큼 입력을 받음
            scanf("%d", &num[i]);
    
        for (i = 0; i < size; i++)//배열의 크기만큼 반복
        {    
            for (j = 0; j < k; j++)
            {
                if (count[j][0] == num[i])
                {
                    count[j][1]++;
                    break;
                }         
            }
            if (j == k)
            {
                count[k][0] = num[i];
                count[k][1]++;
                k++;
            }
            if (num[i] >= 0 && num[i] < 10)//입력의 값이 0에서 9사이인지 확인
            {
                Array[num[i]]++;
            }
        }
        frequency = Array[0];
        frequency_number = 0;
    
        for (b = 0; b < size; b++)//오름차순 정렬
        {
            for (a=0; a < size-1-b; a++)
            {
                if (count[a][0] > count[a+1][0])
                {
                    temp = count[a][0];
                    count[a][0] = count[a+1][0];
                    count[a+1][0] = temp;
                }
            }
        }
    
        for (i = 0; i < 10; i++)//출력
        {
            if (count[i][1]!= 0)
                printf("%d:%5d\n", count[i][0], count[i][1]);
        }
        for (int n = 0; n < 10; n++)
        {
            if (frequency < Array[i])
            {
                frequency = Array[i];
                frequency_number = i;
            }
        }
        printf("%d\n%d\n", frequency_number, frequency);  //빈도수 출력
        return 0;
    }
    

    제가 짠 코드 인데 출력값이 빈도수와 오름차순이 정확하게 떨어져야 하는데 예를들어 9 8 7 5 4 2 2 1 1 1을 넣으면 맨위는 0으로 채워지고 빈도수는 오름차순과 일치하지 않고 다르게 나옵니다 문제의 원인을 몰라서 질문드립니다

  • 프로필 장현준님의 편집
    날짜2020.09.27

    c언어 코드 질문입니다 ㅠㅠ


    안녕하세요 문제를 풀던중 2일동안 고민해도 더이상 안풀려서 문제의 원인을 찾고자 질문합니다 ㅠㅠ 문제 설명 0에서 9까지의 정수만 1000개를 입력받아,

    각각의 정수가 입력된 횟수를 모두 출력하고,

    그 중 가장 많이 입력받은 수와 그 개수를 출력하시오.

    배열은 반드시 0으로 초기화하여 사용하시오.

    입력 형식 공백으로 구분된 0부터 9까지의 정수 (그 외의 값은 들어오지 않는다고 가정할 것)

    출력 형식 0-9까지, 각 정수를 출력하고, colon 을 넣은 후, 5칸에 우측정렬된 정수형으로 출력하고 개행문자로 구분하시오.

    그 이후, 가장 많이 입력받은 수와 그 개수를 정수형으로 각각 개행문자를 추가해 출력할 것

    include

    define size 1000

    int main() {
    int num[size] = { 0, },count[10][2] = { 0, }, Array[10] = { 0, };//배열 초기화 int i,j,k=0; int a,b,temp; int frequency_number, frequency = 0;//빈도수를 나타내는 변수

    for (i = 0; i < size; i++)//배열의 크기만큼 입력을 받음
        scanf("%d", &num[i]);
    
    for (i = 0; i < size; i++)//배열의 크기만큼 반복
    {    
        for (j = 0; j < k; j++)
        {
            if (count[j][0] == num[i])
            {
                count[j][1]++;
                break;
            }         
        }
        if (j == k)
        {
            count[k][0] = num[i];
            count[k][1]++;
            k++;
        }
        if (num[i] >= 0 && num[i] < 10)//입력의 값이 0에서 9사이인지 확인
        {
            Array[num[i]]++;
        }
    }
    frequency = Array[0];
    frequency_number = 0;
    
    for (b = 0; b < size; b++)//오름차순 정렬
    {
        for (a=0; a < size-1-b; a++)
        {
            if (count[a][0] > count[a+1][0])
            {
                temp = count[a][0];
                count[a][0] = count[a+1][0];
                count[a+1][0] = temp;
            }
        }
    }
    
    for (i = 0; i < 10; i++)//출력
    {
        if (count[i][1]!= 0)
            printf("%d:%5d\n", count[i][0], count[i][1]);
    }
    for (int n = 0; n < 10; n++)
    {
        if (frequency < Array[i])
        {
            frequency = Array[i];
            frequency_number = i;
        }
    }
    printf("%d\n%d\n", frequency_number, frequency);  //빈도수 출력
    return 0;
    

    }

    제가 짠 코드 인데 출력값이 빈도수와 오름차순이 정확하게 떨어져야 하는데 예를들어 9 8 7 5 4 2 2 1 1 1을 넣으면 맨위는 0으로 채워지고 빈도수는 오름차순과 일치하지 않고 다르게 나옵니다 문제의 원인을 몰라서 질문드립니다