2017年09月26日
《その51》 線形探索(p.275演習7-14)
新版明解C++入門編 p.275 演習7-14
要素数n の配列 a内の keyと等しい全要素の添字を配列 idxに格納する関数 search_idxを作成せよ。
返却するのは key と等しい要素の個数とする。
int search_idx(int* a, int* idx, int n, int key);たとえば、a に受け取った配列の要素が {1, 7, 5, 7, 2, 4, 7} で key が 7であれば、idx に
{1, 3, 6} を格納した上で 3を返却する。
// p275_演習7-14
#include <iostream>
using namespace std;
int search_idx(int* a, int* idx, int n, int key)
{
int n_match = 0; // n_match … keyと等しい要素の個数
for (int i = 0; i < n; i++)
if (a[i] == key) {
idx[n_match++] = i;
}
return n_match;
}
int main()
{
const int n = 10;
int a[n], idx[n]; // 配列idxの要素数は最大でn個。
int key;
for (int i = 0; i < n; i++) {
cout << "a[" << i << "] : "; cin >> a[i];
idx[i] = -1; // 配列idxの全要素を -1にする。
}
cout << "配列a = {";
for (int i = 0; i < n - 1; i++)
cout << a[i] << ", ";
cout << a[n - 1] << "}\n";
cout << "key : "; cin >> key;
int num = search_idx(a, idx, n, key);
cout << "keyと等しい要素の数 … " << num << '\n';
cout << "idx = {";
for (int i = 0; i < n - 1; i++)
cout << idx[i] << ", ";
cout << idx[n - 1] << "}\n";
cout << "\n------------------------------------\n\n";
/*
演習7-14 のプログラムは以上です。
以下は、p.280「配列オブジェクトの動的生成」の内容を使って
配列idxを改良したコードです。
改良後の配列idx_2 の要素数は、格納する添字の個数とピッタリ
同じになっています。
*/
int* idx_2 = new int[num]; // 配列領域を確保
for (int i = 0; i < num; i++)
idx_2[i] = idx[i];
cout << "idx_2 = {";
for (int i = 0; i < num - 1; i++)
cout << idx_2[i] << ", ";
cout << idx_2[num - 1] << "}\n";
delete [] idx_2; // 確保領域を解放
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6744411
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック