兄貴の伝説 - hatena edition -

ソフトウェア職人を目指してます

5.2 線形検索(番兵版)

番兵の説明があったのでそのまま入れてみます。 #include <iostream> #include <array> using namespace std; static void inputArray(int A[], int num) { for (int i = 0; i < num; i++) { cin >> A[i]; } } static int linearSearch(int A[], int sentinel) { int i = 0; f</array></iostream>…

5.2 線形検索

まずはそのまま書いてみます。内側ループを抜ける条件が微妙ですが、関数化するのを忘れていたためです。もっと丁寧にやらないといけませんね。 #include <iostream> #include <array> using namespace std; static void inputArray(int A[], int num) { for (int i = 0; i < </array></iostream>…

4.6 データ構造の応用:面積計算

これは面積のマージ部分のロジックが全然思いつかなくてダメでした。。解説を読みつつ書いたものがコレ。 #include <iostream> #include <string> #include <vector> #include <stack> using namespace std; static const char DOWN = '\\'; static const char EVEN = '_'; static const char </stack></vector></string></iostream>…

4.4 連結リスト(手動編)、 4.5 標準ライブラリのデータ構造

では、連結リストを手動で・・・と思いましたが、昔自分で作ったことがあるので割愛します。なお、一つ前の記事で「stdin 周りで苦労した」というのは、cin と fgets と scanf を混ぜて使ったら、改行コードの処理が想定しない動きをしてくれたので、仕方な…

4.4 連結リスト

これは苦労しました。。主に stdin 周りで無駄に苦労しました。。かなり汚いコードですが清書は後日。 #include <iostream> #include <string> #include <list> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; enum COMMAND_TYPE { INSERT, DELETE, DELETE_FIRST, DE</cstring></cstdlib></cstdio></algorithm></list></string></iostream>…

4.3 キュー(手動編)

queue も書いてみます。初めはランタイムエラーが出て「?」となりましたが、head とtail の初期化をサボってたからでした。AIZU のコンパイラはきっちりと不定値を入れてくるのですね。なお初期化については下記の記事が参考になります。 プログラミングの…

4.2 スタック(手動編)

std::stack を使うのはあんまりな気がしてきたので、一応手動バージョンを書きます。エラー処理とかは手抜きです。 #include <iostream> #include <array> #include <string> #include <sstream> using namespace std; static bool isOperator(const string& st) { return st[0] == '+' || st[0</sstream></string></array></iostream>…

4.3 キュー

std::queue バージョン。 #include <iostream> #include <queue> using namespace std; struct Process { string name; int time; }; static void inputProcess(queue<Process>& processQueue, int n) { Process in; for (int i = 0; i < n; i++) { cin >> in.name >> in.time; process</process></queue></iostream>…

4.2 スタック

std::stack を使えば良いのかな?と思って書いたコードです。 #include <iostream> #include <string> #include <stack> #include <sstream> using namespace std; static bool isOperator(const string& st) { return st[0] == '+' || st[0] == '-' || st[0] == '*' || st[0] == '/'; } int ma</sstream></stack></string></iostream>…

3.6 シェルソート

本書に「この問題はやや難しいチャレンジ問題です」とある通り、前半最大の山場でした。 #include <iostream> #include <array> #include <vector> #include <cmath> using namespace std; static void printArray(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << endl; } </cmath></vector></array></iostream>…

3.5 安定なソート

説明に従って愚直にコーディング。 #include <iostream> #include <algorithm> #include <array> using namespace std; struct Card { char suit; int value; bool operator==(const Card& rhs) const { return this->suit == rhs.suit && this->value == rhs.value; } }; static void pr</array></algorithm></iostream>…

3.4 選択ソート

いつもどおりソースコードを。 #include <iostream> #include <algorithm> #include <array> using namespace std; static void printArray(int A[], int N) { for (int i = 0; i < N; i++) { cout << (i != 0 ? " " : "") << A[i]; } cout << endl; } static void inputArray(int A[], i</array></algorithm></iostream>…

AIZU ONLINE JUDGE

ここまでのお題はローカルで実行結果を確認してましたが、そもそもオンラインジャッジをまったく受けてなかったので、急遽登録&回答を送信してみました。結果としては全部 OK でした。ということで、今後はオンラインジャッジをベースに進めていきます。> A…

3.3 バブルソート

まずは冒頭の説明をそのままコーディングします。 #include <iostream> #include <array> #include <cstdio> using namespace std; static void printArray(int A[], int N) { for (auto i = 0; i < N; i++) { cout << (i != 0 ? " " : "") << A[i]; } cout << endl; } static int bub</cstdio></array></iostream>…

3.2 挿入ソート

本章では、冒頭の説明の中でアルゴリズムが文章で明示されてますので、それをそのまま実装してみます。 #include <iostream> #include <array> #include <cstdio> void printArray(int A[], int N) { // カンニング1 for (auto i = 0; i < N; i++) { std::cout << (i != 0 ? " " : ""</cstdio></array></iostream>…

2.5 導入問題:回答例

まずは写経から。いきなり写経はどうなの?とは自分でも思いますがとりあえず。 #include <iostream> #include <algorithm> #include <cstdio> int main(void) { int n; std::cin >> n; int max = -1 * 1000000000; int now, ri, min; std::cin >> min; for (auto i = 1; i < n; i++) { st</cstdio></algorithm></iostream>…

2.5 導入問題

さて導入問題から学習開始です。しかし、いきなりですが、「こんなことでハマるのは自分くらいでは?」という状況に陥ったので、ありのままをお伝えします。(書籍内の文章の具体的な説明は端折ります) 入力例2: 3 4 3 2 ↑この入力例、書籍内では縦並びな…

書籍「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」

アルゴリズムを効率的に再勉強するには?と、自分なりに考えた結果、プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 という書籍を購入しました。 こちらはプログラミングコンテスト向けの入門と実践的なものですが、オンラインジャッジを使…

再勉強したい項目

自分が弱点・苦手と思っている要素を列挙します。 アルゴリズム全般 UML 状態遷移図 コラボレーション図 デザインパターン 基本的なパターン(Singleton、Observer、Facadeなど)以外ほとんど全部 ジェネリックプログラミング 関数型プログラミング (あとで…

現状と目標

なぜブログを始めるのか?どういうブログにするのか?という点についてもう少しまとめときます。 動機と目標 自分のプログラマレベルへの危機感 いまは食えてはいるが、転職先を選び放題みたいなレベルではない 職業プログラマとして、これなら大丈夫かな?…

プログラマ的な記事を開始します

はじめまして。自分はプログラマとして働くことで日々の糧を得ている者です。しかし、最近になって特にその能力に限界を感じ始めているため、ここらで気合を入れ直そうと、この場を使ってプログラミングの再勉強をすることにいたしました。よろしくお願いい…