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
な、なるほど…
ありがとうございます。
|
|