[C言語]白駿1427:内線



構想

  • 音...scanfは1つしか使えませんか?複数使うと区別できないのでしょうか?疲れたはずだscanfを1つ使ってもいい
  • 12443をそれぞれarr[i]に入れるには、うーん...各桁数を分けて入れる.while(n>0)は、重複文として%10,/10を使用します.
  • これならarr[i]に入るはずなので、並べ替えましょう.元ならば、選択ソートやバブルソートを行うべきで、以前はクイックソートを学んでいたので、内蔵のクイックソートを試してみましょう.
  • 出力!
  • 私の髪の草

    #include <stdio.h>
    #include <stdlib.h>
    
    int compare(const void *a, const void *b) //
    {
        int num1 = *(int *)a;
        int num2 = *(int *)b;
        if (num1 < num2) // 내림차순이라 부등호 바꿈
            return 1;
        if (num1 > num2)
            return -1;
        return 0;
    }
    
    int main()
    {
        int i;
        int n;
        int len;
        scanf("%d", &n);
        int t = n;
        int s = n;
        len = 0;
        while (s > 0)
        {
            t = s % 10;
            s = s / 10;
            len++;
        }
        int arr[len]; // 처음에 int arr[n]으로 걍 때려박았는데
        // 손해가 너무 심해서 len수를 구한다음에 딱 저장할 공간만 만들어주었다.
        i = 0;
        while (n > 0)
        {
            t = n % 10;
            n = n / 10;
            arr[i] = t;
            i++;
        } // arr[i]에 각 자리수 넣어주기
        qsort(arr, len, sizeof(int), compare); // 퀵 정렬
        i = 0;
        while (i < len)
        {
            printf("%d", arr[i]);
            i++;
        }
    }

    他人を解く


    https://miingjeong.tistory.com/47
    この人はchar型に入力された.したがって、%10/10を行う必要はありません.
    また、文字型なのでstrlenをそのまま使って長さを求めることができます.
    char型配列をint型に再配置するためにarr配列を作成し、「0」でint型に置き換えます.
    #include <stdio.h>
    #include <string.h>
    int main()
    {
    
        int arr[10000] = {0, };
        char s[10000];
        int tmp = 0;
        int i, j;
        scanf("%s", &s);
    
        for (i = 0; i < strlen(s); i++)
            arr[i] = s[i] - '0';
    
        for (i = 0; i < strlen(s) - 1; i++)
        {
            for (j = 0; j < strlen(s) - 1; j++)
            {
                if (arr[j] < arr[j + 1])
                {
                    tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                }
            }
        }
    
        for (i = 0; i < strlen(s); i++)
            printf("%d", arr[i]);
    
        return 0;
    }