##問題文
長さ Nの整数列Aが与えられます。 Aの(添字の)異なる2要素の差の絶対値の最大値を求めてください。
##制約
2≤N≤100 1≤Ai≤10^9
入力はすべて整数である。
##入力
入力は以下の形式で標準入力から与えられる。
N
A1 A2...AN
##出力
Aの(添字の)異なる2要素の差の絶対値の最大値を出力せよ。
という問題で自分は以下のようにコンパイルを試みました。
#include <iostream> using namespace std; int A[1000000000000]; int main() { for (int i = 0; i < 1000000000000; ++i) { cin >> A[i]; if (A[i] < A[i+1]) { cout << A[i+1] << endl; } else { break; } cout << A[i+1] << endl; } }
すると、
/tmp/ccz30crh.o: In function `_GLOBAL__sub_I_A': Main.cpp:(.text.startup+0x145): relocation truncated to fit: R_X86_64_32 against `.bss' Main.cpp:(.text.startup+0x154): relocation truncated to fit: R_X86_64_32 against `.bss' collect2: error: ld returned 1 exit status
というエラーが帰ってきました。
1行目を見るとグローバル関数がどうたらって言ってるようなのですが指摘されている内容がわかりませんでした。また僕のコードは常に左から右にしか数字の大小を比べてない気がして少し違和感があるのですがどう直したら良いか教えていただけると幸いです、よろしくお願いします。
エラーについてはわかりませんが,それはそれとして,とりあえず題意に沿ったコードを書くことを行うべきではないかと思うのですが.
自分は隣り合った配列(A[i]とA[i+1])の大小を順番に比較していって大きかったら出力するプログラムを書いたつもりだったのですが、自分のプログラムがどう題意を満たしていないのかわからないので直すポイントを教えていただきたいです。
> Aの(添字の)異なる2要素の差の絶対値の最大値を出力せよ。
に対して,
> 隣り合った配列(A[i]とA[i+1])の大小を順番に比較していって大きかったら出力
することが妥当なんでしょうか? 求められていることなんでしょうか?
すいません、言葉が足りませんでした。隣り合った配列(A[i]とA[i+1])の大小を順番に比較していって大きかったらその値を保持?して左から右に操作を行えば題意を満たせますか?
実際にどのようなアルゴリズムを考えておられるのかわかりませんが,私がこの問題文を読めば「最後に結果値を1個だけ出力する」ことが求められていると捉えます.なので,値を複数個出力し得るコードは問題の内容を無視した意味不明なコードに見えます.
Nが入力されると言っているのに,それを読む気はないみたいですし.
また,仮に,全ての入力値を一旦メモリ上に保持してから処理するようなアルゴリズムを考えたのだとしても,
2≤N≤100 という入力個数の仕様が明記されていることを考えれば,A[1000000000000]とかいうことにはならないと思うし…
本件の主題(何かコード書いたら出たエラーは何?)とは無関係な話ですので,これ以上は控えさせていただきますが,問題に取り組むならまずは問題文を読むことから始めるべきなんじゃないのかな,と.
