ITP1_10_D: Distance II
問題
- URL: ミンコフスキー距離 | プログラミング入門 | Aizu Online Judge
- 要約: p=1, 2, 3, ∞ の場合のミンコフスキー距離を求めよ
ソースコード
#include <stdio.h> #include <math.h> int main() { int i; int n; scanf("%d", &n); int x[n], y[n]; for( i = 0; i < n; ++i ) scanf("%d", &x[i]); for( i = 0; i < n; ++i ) scanf("%d", &y[i]); int p; double D; for( p = 1; p < 4; ++p ){ D = 0; for( i = 0; i < n; ++i ) D += (double)(pow(fabs(x[i] - y[i]), p)); D = (double)pow(D, 1.0/p); printf("%lf\n", D); } D = 0; for( i = 0; i < n; ++i ){ double tmp = (double)(fabs(x[i] - y[i])); D = D < tmp ? tmp : D; } printf("%lf\n", D); return 0; }
つまづいた点
D = (double)pow(D, 1.0/p);
pow()はdouble型なのでキャスト必要ないですね,今気付きました.
それはさておき,問題なのは "1/p" です.
int p; → double p;
または
1 → 1.0
としなければなりません.
最初は (double)(1/p) としていましたが,演算の時点ではint型になってしまい,誤った値を扱ってしまいます.
int型の結果をdouble型にキャストするのではなく,double型で結果を出してもらわねばなりませんでした.
ミンコフスキー距離において(恐らく) p∈N であるから,今回は int p; とし,1を1.0としてdouble型にしました.