トップページ > 過去ログ > 記事閲覧
大きい順に番号を代入
名前:匿名ということで 日時: 2007/01/30 15:00

はじめまして。早速質問させてください。 配列 a[ 8 ] と b[ 8 ] があって、a[ 0 ]〜a[ 7 ] の数値を比較し、b の配列に 大きい順に 1 、2 、3 、・・・と代入したいのですが、何か良い方法がないものでしょうか。 例えば、a[ 8 ] の内容が { 50 , 55 , 60 , 45 , 30 , 20 , 25 , 10 }だとしたら、b[ 8 ] に { 3 , 2 , 1 , 4 , 5 , 7 , 6 , 8 } という感じに代入したいのです。 どなたかご教授ください。

Page: 1 |

Re: 大きい順に番号を代入 ( No.1 )
名前:通りすがり 日時:2007/01/30 15:33

予めbの要素に1を代入し 各要素数の値とそれ以外の要素数の値を比較して、各要素数の値が小さいのであれば 該当する bの要素数をインクリメントする。 例えば、a[0]をターゲットの要素数にした場合 a[0]以外のa[1]〜a[7]の値と比較してa[0]のほうが小さかった場合 b[0]に1を足す。 上記のa[0]と同じ処理を a[1]〜a[7]に対して行う。 プログラムにするとこんな感じ。 #include <cstdio> int main() { const int MAX_VALUE = 8; int i, j; int a[MAX_VALUE] = { 50, 55, 60, 45, 30, 20, 25, 10 }; int b[MAX_VALUE]; for (i = 0; i < MAX_VALUE; i++) { b[i] = 1; } for (i = 0; i < MAX_VALUE; i++) { for (j = 0; j < MAX_VALUE; j++) { if (a[i] < a[j]) { b[i]++; } } } for (i = 0; i < MAX_VALUE; i++) { printf("%d ", b[i]); } printf("\n"); return 0; }
Re: 大きい順に番号を代入 ( No.2 )
名前:匿名ということで 日時:2007/01/30 16:07

なるほど!分かりました。 ありがとうございます。
Re: 大きい順に番号を代入 ( No.3 )
名前:匿名ということで 日時:2007/02/01 12:29

再び質問です。 同じ数値だった場合は配列の番号が若い方を優先するにはどうしたらよいでしょうか。 例 : int a[ 8 ] , b[ 8 ] 、a の要素が { 50 , 55 , 60 , 45 , 50 , 30 , 30 , 30 }だった場合、b を { 3 , 2 , 1 , 5 , 4 , 6 , 7 , 8 }としたいのですが。
Re: 大きい順に番号を代入 ( No.4 )
名前:通りすがり 日時:2007/02/01 13:13

前のやつの続きでやるなら以下の文を追加する。 for (i = 0; i < MAX_VALUE - 1; i++) { for (j = i + 1; j < MAX_VALUE; j++) { if (b[i] == b[j]) { b[j]++; } } } 普通にソートでやるなら以下のプログラム。 #include <cstdio> int main() { const int MAX_VALUE = 8; int i, j; int a[MAX_VALUE] = { 50, 55, 60, 45, 30, 20, 20, 20 }; int b[MAX_VALUE]; for (i = 0; i < MAX_VALUE; i++) { b[i] = i + 1; } for (i = 0; i < MAX_VALUE - 1; i++) { for (j = i + 1; j < MAX_VALUE; j++) { if (a[i] < a[j]) { int tmp = b[i]; b[i] = b[j]; b[j] = tmp; } } } for (i = 0; i < MAX_VALUE; i++) { printf("%d ", b[i]); } printf("\n"); return 0; }
Re: 大きい順に番号を代入 ( No.5 )
名前:匿名ということで 日時:2007/02/01 13:28

な、なるほど… ありがとうございます。

Page: 1 |