質問: 以下のリンクに示す問題を解いていたのですが,サンプルケースといくつかのケースでは正解,どのようなケースか見えないものでいくつか不正解となってしまい,なぜ間違っているのかを見つけることが出来ませんでした. 式等にミスがあったりすればご指摘をお願いいたいます. またC++は昨日勉強し始めたばかりで把握している機能があまりないので,この問題を解くうえでもっと便利なものがあれば教えていただきたいです.問題の傾向的に今回はあまりなさそうだなとは感じますが. また,コードについてなのですが,最後の条件分岐はsignの位置によって変える必要がないのはほぼ書き終わったあとに気づいたので言及してくださらなくても問題ありません. よろしくお願いいします. 問題 ``` #include #include #include #include int main(){ int N,range; int *series; std::cin>>N>>range; try{ series=new int[N]; }catch(const std::bad_alloc e){ std::cout<<"cannnot be allocated."<>series[i]; if(series[i]
回答: ダメなケース 入力 4 4 3 1 4 2 出力は 1 なのに、そのコードでは 2。 問題では、N、K、(N個の A) が入力なのに、 そのコードでは、K を読み込んでいません。 K と (N-1)個の A を series[i] に読み込んで、 最後の A を読み込んでいません。 **追記2** すみません。私の勘違いでした。`>>range` を見落としていました。 でも、ダメなケースはその通りですよね。 私なら、次のようなコードを書きます。 ``` #include int main() { int n, k; std::cin >> n >> k; int *a = new int[n]; for (int i = 0; i < n; i++) std::cin >> a[i]; int count = (n - 1) / (k - 1); if ((n - 1) % (k - 1) != 0) count++; std::cout << count << std::endl; } ``` このコードの説明が必要ならコメントにそう書いてください。 そうでなくて、質問のコードのどこが悪いのかを指摘してほしいのなら、 申し訳ないのですが、私にはできません。 そのコードの各部分が何をしているのかの説明を逆にお願いしたいです。