質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1465閲覧

共通区間を求めるプログラム

tempest2017

総合スコア11

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/07/03 11:49

以下の共通区間を求めるプログラムを作ったのですがテキストファイルを読み込ませましたら、不正解の出力結果になります。正解の出力結果を出すためにはどこのコードを直せば良いでしょうか?

C++

1#include <iostream> 2#include <utility> 3#include <ctime> 4#include <random> 5#include <algorithm> 6 7#include <iomanip> 8#include <fstream> 9#include <stdlib.h> 10#include <math.h> 11#include <chrono> 12using namespace std; 13 14void search(std::vector<int> array, std::vector<int> at) 15{ 16 int i = 0, j; 17 int k , z; 18 19 while(i < array.size()) { 20 for (int j = 0; j < array.size(); j++) { 21 22 if (array[i] == at[j] && array[i + 1] == at[j + 1] || array[i] == at[j] && array[i + 1] == at[j - 1]) { 23 if (j + 1 < array.size() || j - 1 >= 0) { 24 k = 2; 25 for (z = 0; z < k; z++) { 26 cout << array[i + z] << ' '; 27 } 28 29 30 } 31 } 32 33 } 34 i++; 35 } 36 cout << '\n'; 37} 38 39int main() 40{ 41 int i, j, N; 42 int x, y; 43 int k; 44 int z; 45 46 ifstream fin("./自作アルゴリズム例題/共通区間_問題例/共通区間_10.txt"); 47 48 do { 49 fin >> N; 50 51 std::vector<int> array; 52 array.resize(N); 53 54 std::vector<int> at; 55 at.resize(N); 56 57 if (!fin.is_open()) { 58 cout << "There is NOT a file.\n"; 59 exit(0); 60 } 61 62 63 for (i = 0; i < N; i++) { 64 fin >> x; 65 array[i] = x; 66 } 67 68 for (i = 0; i < N; i++) { 69 fin >> y; 70 at[i] = y; 71 } 72 73 74 search(array, at); 75 76 } while (N != 0); 77 78 return 0; 79 80 81}
10 8 7 4 5 0 3 6 9 2 1 5 3 0 9 1 6 4 8 2 7 ```不正解の出力結果 5 0 0 3 ```正解の出力結果 0 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izmktr

2019/07/04 01:35

共通区間の定義を書いてください 例えば、同じ文字が出てくれば、それは長さ1の共通区間のはずですよね? 出力の意味をちゃんと書かないと、cout << "0 3" << endl; でいいわけです
guest

回答1

0

ベストアンサー

j = 0 のとき、at[j-1] を参照するなどの問題があります。

C++

1#include <iostream> 2#include <fstream> 3#include <vector> 4using namespace std; 5 6void search(vector<int> array, vector<int> at) 7{ 8 for (int i = 1; i < array.size(); i++) 9 for (int j = 1; j < array.size(); j++) 10 if (array[i] == at[j] && array[i-1] == at[j-1] 11 || array[i] == at[j-1] && array[i-1] == at[j]) 12 cout << ' ' << array[i-1] << ' ' << array[i]; 13 cout << '\n'; 14} 15 16int main() 17{ 18 ifstream fin("./自作アルゴリズム例題/共通区間_問題例/共通区間_10.txt"); 19 if (!fin) { cout << "There is NOT a file.\n"; return 1; } 20 21 int N; 22 while (fin >> N, fin && N > 0) { 23 vector<int> array(N), at(N); 24 for (int i = 0; i < N; i++) fin >> array[i]; 25 for (int i = 0; i < N; i++) fin >> at[i]; 26 search(array, at); 27 } 28}

投稿2019/07/04 02:11

編集2019/07/04 02:24
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問