##経緯+つまずいたポイント
C++に関しては初心者で、文法の勉強を兼ねてAtCoderに挑戦していました。
ABC113のB問題に取り掛かっていたところ、合っているはずのコードが何故かWAとなってしまいます。
###WAとなったコード
#include <iostream>
#include <bits/stdc++.h>
int main()
{
int N, T, A;
std::cin >> N >> T >> A;
std::vector<int> H(N);
for (int i = 0; i < N; i++){
std::cin >> H[i];
}
double minValue = 710;
int minIndex = 0;
for (int i = 0; i < N; i++){
double tmp = abs(A - (T - H[i] * 0.006));
if (tmp < minValue){
minValue = tmp;
minIndex = i;
}
}
std::cout << minIndex + 1 << std::endl;
return 0;
}
1,2時間ほど考えられる箇所を修正しては戻し、修正しては戻しを繰り返したところ
「abs」が意図した出力になっていないことが分かりました。
###std::absとしないといけないらしい?
例えばabs(-2.3)とすると戻り値は2となるようです。(小数点以下切り捨て?)
std::abs(-2.3)はちゃんと2.3になる。。。
ただしこれはGCCのときのみで、Clangだとどちらも2.3になりました。
##それぞれの出力をまとめた
###①GCC 9.2.1(abs)
#include <iostream>
int main(){
double value = -2.3;
std::cout << abs(value) << std::endl; //出力->2
return 0;
}
###②GCC 9.2.1(std::abs)
#include <iostream>
int main(){
double value = -2.3;
std::cout << std::abs(value) << std::endl; //出力->2.3
return 0;
}
###③Clang 10.0.0(abs)
#include <iostream>
int main(){
double value = -2.3;
std::cout << abs(value) << std::endl; //出力->2.3
return 0;
}
###④Clang 10.0.0(std::abs)
#include <iostream>
int main(){
double value = -2.3;
std::cout << std::abs(value) << std::endl; //出力->2.3
return 0;
}
##引き続き詳細は調査
とりあえず備忘録として記事にしましたが
いまいちわからない箇所が多いので、追記・修正していきたいと思います。