GUZAI3ノートブック

友人であるGUZAI3様の依頼で備忘録を書いています。

Algorithm

vectorから重複要素を削除する

これを解いているときに「vectorから重複を削除する方法忘れちゃった~」となったので復習した。 atcoder.jp 方法1 : sort -> unique + erase 重複要素を線形探索するために sort しておく。 unique で隣接する重複要素を除いた要素を先頭に集める。 unique …

C言語で座標平面上の任意の点を反時計回りに回転させたときの座標を計算する

AtCoderで座標回転が出題されたときに苦労したので、ここで整理しておく。まず、以下のように記号を定める。 :回転前の座標 :回転後の座標 :反時計回りに回転させる角度すると、原点を中心とした反時計回りの回転はこのように計算できる。整理して...次に…

C++のLambda式で多重for文を抜ける

序 多重for文 を抜ける方法はいくつかあって、例えば各ループごとにbreak判定したり、goto文で飛ぶ。最近は Lambda式 でうまく抜ける方法を知ったので、AtCoderの過去問を解く際に使ってみた。 過去問 atcoder.jp 提出コード #include <iostream> #include <vector> int main()</vector></iostream>…

C言語で再帰関数を使わずに最大公約数(GCD)を求める

定番であるユークリッドの互除法で。 #include <stdio.h> int main() { unsigned int num1 = 1029; // GCDを求めたいペアのひとつ unsigned int num2 = 1071; // GCDを求めたいペアのひとつ // GCD計算 unsigned int a = num1; unsigned int b = num2; unsigned int r</stdio.h>…

第三回アルゴリズム実技検定(PAST)を受験した

結果 52点 (初級) 各問題の振り返り (解けたG問題まで) A問題 使えそうな関数をググって transform を使った。 ただし using namespace std; をすると名前空間で問題になることがあるみたい。いきなりハマって焦った。 参考 c++ - std::transform() and toup…

正整数の除算で小数点以下を切り上げたいときは『分子』に『分母-1』を足す

■やりたいこと 『正の整数 A, B について、Bを最低何倍すればA以上になるか。(答えは整数倍とする。)』を、 プログラムの整数除算(小数点以下切り捨て)で求めたい。たとえば、A = 7, B = 2 のときは 4 倍。 たとえば、A = 8, B = 4 のときは 2 倍。 (割…

C言語でFizzBuzz

#include <stdio.h> int main() { int end = 128; // 出力数 for (int n = 1; n < end; n++) { if (n % 15 == 0) { puts("FizzBuzz"); } else if (n % 3 == 0) { puts("Fizz"); } else if (n % 5 == 0) { puts("Buzz"); } else { printf("%d\n", n); } } return 0; } </stdio.h>…