[C言語]白駿1427:内線
構想
私の髪の草
#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;
}
Reference
この問題について([C言語]白駿1427:内線), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-1427-소트인사이드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol