概要
※上記問題に取り掛かかり最初に入出力部分だけ作成しているところです。
※提示しているサンプルコードは質問用なので問題の条件とは関係ありません。
※参考問題を解くことが本題ではありません。
サンプルコードで1ループ毎に配列v3
の内容だけ出力させているはずなのに意図しないデータが出力されます。
具体的には配列v3
は配列v1
から加工したデータのみ入れているはずです。
しかし実行させると記述してないはずの配列v2
の内容まで出力されてしまいます。
確認用の"-End-"
も2回出れば良いはずなのですが4回出てるのでおかしいです。
知りたいこと
期待通りの出力にする方法やコードに間違いなどあればご指摘頂けると助かります。
ループの実装などで初歩的なミスがあるかもしれませんがアドバイス頂ければ助かります。
試したこと
whileループ
無しにして1データセット限定にして出力させると期待通りに出たのでwhileループ
に問題があるかと思いwhile(true)
にしてif(M==0)
でbareak
させたりもしてみましたが結果同じでした。
サンプルコード
C++
1#include <bits/stdc++.h> 2#define rep(i, m, n) for (int i = m; i < n; ++i) 3 4void proc() { 5 unsigned M; 6 while (std::cin >> M, M) { 7 8 int x, y; 9 std::vector<std::pair<int, int>> v1, v2, v3; 10 11 rep(i, 0, M) { 12 std::cin >> x >> y; 13 v1.push_back(std::make_pair(x, y)); 14 } 15 16 unsigned N; 17 rep(i, 0, N) { 18 std::cin >> x >> y; 19 v2.push_back(std::make_pair(x, y)); 20 } 21 22 rep(i, 0, v1.size() - 1) { 23 v3.push_back(std::make_pair(v1[i + 1].first - v1[i].first, 24 v1[i + 1].second - v1[i].second)); 25 } 26 27 // ※配列v3の内容をここでしか出力していないはず 28 for (auto p : v3) { 29 std::cout << "x:" << p.first << " y:" << p.second << std::endl; 30 } 31 std::cout << "-End-" << std::endl; 32 } 33} 34 35int main() { 36 std::cin.tie(0); 37 std::ios::sync_with_stdio(false); 38 39 proc(); 40 41 getchar(); 42 return 0; 43} 44
入力データ
txt
12 20 0 31 1 43 544 44 655 55 766 66 82 9777 777 10888 888 113 12987 987 13765 765 14543 543 150
出力結果(ターミナル画面の状態)
txt
12 20 0 31 1 4x:1 y:1 5-End- 63 744 44 855 55 966 66 10x:11 y:11 11x:11 y:11 12-End- 132 14777 777 15888 888 16x:111 y:111 17-End- 183 19987 987 20765 765 21543 543 22x:-222 y:-222 23x:-222 y:-222 24-End- 250
期待する出力(ターミナル画面の状態)
txt
12 20 0 31 1 4x:1 y:1 5-End- 63 744 44 855 55 966 66 102 11777 777 12888 888 13x:111 y:111 14-End- 153 16987 987 17765 765 18543 543 190
補足情報(開発環境など)
Win10
VSC1.47.3
C++14
gcc version 8.2.0 (Rev3, Built by MSYS2 project)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 11:04