今現在、ネットで見つけたC言語の問題を解いているのですが、知識面と技術面が足りなくて、なかなか思うようにかけません。
問題は、
入力した五つの数字、それぞれ各桁を足して合計を求め、合計が大きい順(降順)に並び替える、(但し和が同じ場合は元の数字が小さい方が先)という問題です。
例えば
input
1919810
87654312
29393091
12345678
94789487
上記の数字ぞれぞれの各桁の和は29,36,36,36,56で更に元の数字が小さい方が先ということも考慮すると
output
94789487
12345678
29393091
87654312
1919810
という出力になります。
元の数字の各桁の和を求めて、和を降順にしたコードは書けたのですが、この問題は和の降順を出力するのが問題ではなく、それぞれ各桁の和を求めて和が大きい元の数字を並び替えるもので、そこがうまく書けません。
どなたかヒントをいただけたら嬉しいです。私はどの分野の知識が足りてないですか?
#include <stdlib.h> int cmpnum(const void * n1, const void * n2) { if (*(int *)n1 > *(int *)n2) { return -1; } else if (*(int *)n1 < *(int *)n2) { return 1; } else { return 0; } } int main(){ int num,dig,N,arr[100]; scanf("%d",&N); for(int i=0;i<N;++i){ scanf("%d",&num);//1919810 87654312 29393091 12345678 94789487 int sum=0; while(num){ dig = num % 10;//各桁の値を求める sum = sum + dig;//各桁をたす num = num / 10; } arr[i]=sum; } qsort(arr, N, sizeof(arr[0]), cmpnum); for (int i = 0; i < N; i++) printf("%d ", arr[i]); printf("\n"); return 0; }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/23 18:22
2021/11/23 18:55
2021/11/24 01:38
2021/11/24 01:56
2021/11/24 02:00
2021/11/24 02:24
2021/11/24 02:41