競技プログラミング風 標準C++ライブラリ入門【第6回】


競技プログラミング風 標準C++ライブラリ入門【第6回】

今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。

問題を理解したら、テストコードをコンパイル・実行していただきたい。そのままだと実行時に「NG」が表示される。 コードを完成させ、「Good Job!」を表示させてすっきりしてほしい。グッドラック!

目次

3の倍数カウント(難易度:★★☆☆☆)

問題

引数で const vector<int>& 型の数値リストを受け取り、3の倍数の要素数を返す関数 int count3x(const vector<int>& lst) を実装しなさい。

例えば、{3, 1, 4, 6, 0, 2} が渡された場合は 3 を、{-3, 1, 4, 6, 2} が渡された場合は 2 を返す。

#include <iostream>       //  標準入出力ライブラリ
#include <algorithm>
#include <vector>
using namespace std;    //  std 名前空間使用
#define DO_TEST(exp)    do_test(exp, __LINE__)
void do_test(bool b, int line) {
    if( b ) return;     //  OK
    cout << "\nNG at line " << line << "\n";
    exit(1);
}
int count3x(const vector<int>& lst) {
    return 0;   //  ToDo: 標準関数を使ってここを書き換え、lst 中の3の倍数の数を返す
}
int main() {
    vector<int> lst = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    DO_TEST( count3x(lst) == 4 );
    vector<int> lst2 = {3, 1, 4, 3};
    DO_TEST( count3x(lst2) == 2 );
    cout << "\nGood Job!\n";
    return 0;
}
ヒント
解答例
解説

幅指定文字列変換(難易度:★★☆☆☆)

問題

int 型の値、文字幅を引数で受け取って、それを文字列に変換したものを返す string itostr(int a, int wd) を定義しなさい。
単純に文字列化したものの文字数が wd 未満の場合は、先頭に半角空白(’ ‘)を付加し、文字数がwdになるようにしなさい。

例えば、123, 4 が引数で渡された場合は ” 123″ を、-99, 2 が渡された場合は “-99” を返す。

#include <iostream>       //  標準入出力ライブラリ
#include <string>
using namespace std;    //  std 名前空間使用
#define DO_TEST(exp)    do_test(exp, __LINE__)
void do_test(bool b, int line) {
    if( b ) return;     //  OK
    cout << "\nNG at line " << line << "\n";
    exit(1);
}
string itostr(int a, int wd) {
    return "";      //  ToDo: 標準関数を使い、ここを書き換えて、a の値を文字幅wdの文字列に変換したものを返す
}
int main() {
    DO_TEST( itostr(123, 2) == "123" );
    DO_TEST( itostr(123, 4) == " 123" );
    DO_TEST( itostr(-99, 2) == "-99" );
    DO_TEST( itostr(-99, 5) == "  -99" );
    cout << "\nGood Job!\n";
    return 0;
}
ヒント
解答例
解説

文字列昇順カウント(難易度:★★☆☆☆)

問題

第1引数で const vector<string>& 型の文字列リストを引数で受け取り、 各文字列を昇順にソートし各文字列の出現数を vector<int>& 型第2引数に格納する関数 void my_count(const vector<string>& lst, vector<int>& result) を実装しなさい。

例えば、{“abc”, “a”, “abb”, “abc”, “abc”, “a”} が第1引数で渡された場合、第2引数に {2, 1, 3} が設定される (”a”: 2個、”abb”: 1個、”abc”: 3個)。

#include <iostream>       //  標準入出力ライブラリ
#include <string>
#include <vector>
#include <map>
using namespace std;    //  std 名前空間使用
#define DO_TEST(exp)    do_test(exp, __LINE__)
void do_test(bool b, int line) {
    if( b ) return;     //  OK
    cout << "\nNG at line " << line << "\n";
    exit(1);
}
void my_count(const vector<string>& lst, vector<int>& result) {
    //  ToDo: 標準関数を使い、ここを書き換えて、lst の各文字列の出現数を辞書順にしたものを result に格納
}
int main() {
    vector<string> lst = {"abc", "a", "abb", "abc", "abc", "a"};
    vector<int> result;
    my_count(lst, result);
    DO_TEST( result == vector<int>({2, 1, 3}) );
    cout << "\nGood Job!\n";
    return 0;
}
ヒント
解答例
解説

関連記事

競技プログラミング風 標準C++ライブラリ入門【第12回】

競技プログラミング風 標準C++ライブラリ入門【第12回】 今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。 問題を理解したら、テストコードをコンパイル・実行していただき […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第11回】

競技プログラミング風 標準C++ライブラリ入門【第11回】 今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。 問題を理解したら、テストコードをコンパイル・実行していただき […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第10回】

競技プログラミング風 標準C++ライブラリ入門【第10回】 今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。 問題を理解したら、テストコードをコンパイル・実行していただき […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第9回】

競技プログラミング風 標準C++ライブラリ入門【第9回】 これまでに競技プログラミング風 標準C++ライブラリ入門 を2シーズン、8回にわたりお届けしたが、各方面に好評だったので、 さらにおかわり(シーズン3)として【第 […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第8回】

競技プログラミング風 標準C++ライブラリ入門【第8回】 今回で本シリーズも最後だ。競技プログラミング風問題を解いて、標準C++ライブラリにより詳しくなっていただこう。 問題を理解したら、テストコードをコンパイル・実行し […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第7回】

競技プログラミング風 標準C++ライブラリ入門【第7回】 今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。 問題を理解したら、テストコードをコンパイル・実行していただきた […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第6回】

競技プログラミング風 標準C++ライブラリ入門【第6回】 今回も、標準C++ライブラリの基本をマスターするための競技プログラミング風問題を解いていただこう。 問題を理解したら、テストコードをコンパイル・実行していただきた […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第5回】

競技プログラミング風 標準C++ライブラリ入門【第5回】 これまでに競技プログラミング風 標準C++ライブラリ入門 を4回にわたりお届けしたが、各方面に好評だったので、 おかわり(シーズン2)として【第5回】~【第8回】 […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第4回】

競技プログラミング風 標準C++ライブラリ入門【第4回】 今回で本シリーズも最後だ。今回も競技プログラミング風問題を解いて、標準C++ライブラリにより詳しくなっていただこう。 問題を理解したら、テストコードをコンパイル・ […]
コメントなし

競技プログラミング風 標準C++ライブラリ入門【第3回】

競技プログラミング風 標準C++ライブラリ入門【第3回】 今回も、標準C++ライブラリ入門のための競技プログラミング風問題を解いて、標準C++ライブラリに親しんでいただきたい。 問題を理解したら、テストコードをコンパイル […]
コメントなし
筆者:津田伸秀
プロフィール:テニス・オセロ・ボードゲーム・パズル類が趣味の年齢不詳のおじさん。 自宅研究員(主席)。vi と C++が好き。迷走中・・・ ボードゲーム・パズル系アプリ開発・リリースしてます。
  • このエントリーをはてなブックマークに追加

PAGE TOP