fork download
  1. /*
  2.   プログラミングのお題スレ Part5
  3.   https://m...content-available-to-author-only...h.net/test/read.cgi/tech/1564310397/
  4.  
  5.   832デフォルトの名無しさん2019/10/23(水) 20:25:56.13ID:LcbXQT4h>>833>>836>>837>>838>>839>>842
  6.   お題:整数配列の奇数要素のみをソートした配列を返す処理を書いてください
  7.  
  8.   入力例:[6, 5, 4, 3, 2, 1]
  9.   出力例:[6, 1, 4, 3, 2, 5]
  10.  
  11.  
  12.   858デフォルトの名無しさん2019/10/26(土) 07:11:59.41ID:I0XoRu/q>>859>>861>>866
  13.   お題:>>832 に「偶数要素は2で割って降順ソート」という要件を追加してください
  14.   すでに回答済みの場合は最少限の変更でのご対応で腕(もしくは言語のポテンシャル)を見せてください
  15.  
  16.   859デフォルトの名無しさん2019/10/26(土) 07:27:04.95ID:I0XoRu/q>>862
  17.   >>858
  18.   入力例:[0, 9, 8, 4, 6, 5, 1, 2, 7, 3]
  19.   出力例:[4, 1, 3, 2, 1, 3, 5, 0, 7, 9]
  20. */
  21.  
  22. #include <stdio.h>
  23. #define ARRSIZE(arr) (sizeof(arr)/sizeof(arr[0]))
  24.  
  25. void show(int arr[], int size){
  26. int i;
  27. printf("[%d", arr[0]);
  28. for(i = 1; i < size; i++)
  29. printf(", %d", arr[i]);
  30. puts("]");
  31. }
  32. void swap(int *a, int *b){
  33. int t = *a; *a = *b; *b = t;
  34. }
  35. void sort(int arr[], int size){
  36. int *p,*q,*e = arr + size;
  37. for(p = arr; p < e; p++){
  38. for(q = p+1; q < e; q++)
  39. if(*p%2 && *q%2 && *p>*q || !(*p%2) && !(*q%2) && *p<*q)
  40. swap(p,q);
  41. if(!(*p%2))
  42. *p /= 2;
  43. }
  44. }
  45. int main(void){
  46. int arr[] = {0, 9, 8, 4, 6, 5, 1, 2, 7, 3};
  47. int size = ARRSIZE(arr);
  48. show(arr, size);
  49. sort(arr, size);
  50. show(arr, size);
  51. return 0;
  52. }
Success #stdin #stdout 0s 4284KB
stdin
Standard input is empty
stdout
[0, 9, 8, 4, 6, 5, 1, 2, 7, 3]
[4, 1, 3, 2, 1, 3, 5, 0, 7, 9]