AOJ 0054 Sum of Nth decimal places
#include <iostream> using namespace std; int main() { int a, b, n; while (cin >> a) { cin >> b >> n; int sum = 0; for (; n-- > 0;) { a = a % b * 10; sum += a / b; } cout << sum << endl; } return 0; }
AOJ 0053 Sum of Prime Numbers
n個の素数を足すまでwhile文を回しただけ。
#include <iostream> #include <numeric> using namespace std; int main() { bool prime[1000000]; fill(prime, prime + 1000000, true); prime[0] = prime[1] = false; for (int i = 2; i * i < 1000000; i++) { for (int j = 2; j * i < 1000000; j++) { if (!prime[i * j]) continue; prime[i * j] = false; } } int n; while (cin >> n) { if (n == 0) break; int t = 0, sum = 0; while (n > 0) { if (!prime[++t]) continue; n--; sum += t; } cout << sum << endl; } return 0; }
AOJ 0052 Factorial II
因数5がいくつか計算する
#include <iostream> using namespace std; int main() { int n; while (cin >> n) { if (n == 0) break; int i = 0; while (n /= 5) i += n; cout << i << endl; } return 0; }
AOJ 0046 Differential
そのまんま、
#include <iostream> using namespace std; int main(){ double n, ma = 0, mi = 1000000; while (cin >> n) { if (n > ma) ma = n; if (n < mi) mi = n; } cout << (ma - mi) << endl; return 0; }
AOJ 0045 Sum and Average
自分で四捨五入する関数書いたらエラー吐かれたのでしぶしぶstl使った...
#include <iostream> #include <cmath> using namespace std; int main() { int n, w, sum = 0, i = 0; double ws = 0; char t; while (cin >> n) { cin >> t >> w; i++; sum += n * w; ws += w; } cout << sum << endl; cout << round(ws / i) << endl; return 0; }
AOJ 0044 Prime Number II
最小の素数と最大の素数 | Aizu Online Judge
エラトステネスの篩で素数判定をした後に探索、愚鈍なコードを書いたと思う(numericインクルードしとけばfill仕えたのか...)
#include <iostream> #include <numeric> using namespace std; int main() { bool prime[100000]; fill(prime, prime + 100000, 1); prime[0] = prime[1] = false; for (int i = 2; i * i < 100000; i++) { for (int j = 2; i * j < 100000; j++) { if (!prime[i * j]) continue; prime[i * j] = false; } } int n; while (cin >> n) { int i = 0; for (int i = n - 1; i >= 0; i--) { if (prime[i]) { cout << i << " "; break; } } for (int i = n + 1; i < 100000; i++) { if (prime[i]) { cout << i << endl; break; } } } return 0; }
AOJ 0043 Puzzle
1~9まで探索し、刻子か順子をできる場合にその牌を取り除いて最終的に同じ牌が二つあればiの数字を足したときにパズルができるという判定(麻雀の話)
#include <iostream> #include <string> #include <vector> using namespace std; int tmp[10]; bool solve(int n, int f) { bool judge = false; if (f == 4) { for (int i = 1; i < 10; i++) { if (tmp[i] == 2) { return true; } } return false; } if (tmp[n] >= 3) { tmp[n] -= 3; judge = solve(n, f + 1); if (judge) return true; tmp[n] += 3; } if (n <= 7 && tmp[n] >= 1 && tmp[n + 1] >= 1 && tmp[n + 2] >= 1) { tmp[n]--; tmp[n + 1]--; tmp[n + 2]--; judge = solve(n, f + 1); if (judge) return true; tmp[n]++; tmp[n + 1]++; tmp[n + 2]++; } if (n < 9) { judge = solve(n + 1, f); } return judge; } int main() { string source; while (cin >> source) { int pai[10] = { 0 }; for (int i = 0; i < 13; i++) { pai[source[i] - '0']++; } vector <int> v; for (int i = 1; i < 10; i++) { if (pai[i] < 4) { pai[i]++; for (int j = 0; j < 10; j++) { tmp[j] = pai[j]; } if (solve(1, 0)) { v.push_back(i); } pai[i]--; } } if (v.empty()) cout << 0 << endl; else { for (int i = 0; i < (int)v.size() - 1; i++) { cout << v[i] << ' '; } cout << v[v.size() - 1] << endl; } } return 0; }
配列の初期化にfillを使おうとすると必ずコンパイルエラーになるのなんでやろ...memsetとか言うのを使った方がいいのだろうか。