ふみをチャレンジ[7]
1週間やってこれた(∩´∀`)∩ワーイ
明日はセンター試験。受験生のみなさん、諦めずに最後まで頑張ってください!
答案
#include <stdio.h> int main() { char str[21], *p; p = str; scanf("%s", str); while(*p) { p++; } while(p > str) { p--; putchar(*p); } putchar('\n'); return 0; }
反省
これはポインタを勉強したときに作ったことがあったので、簡単に作ることができた。手元の環境ではchar str[20]でも大丈夫だったけど、AOJではRuntime Errorと言われた。\0のスペースの問題なんだろうけど。
Twitterのプロフィールの下に「リストへの追加/削除」ボタンを追加するユーザースクリプト書いた
先日、Twitterでリストの整理をしていたら、間違ってブロックの項目を選んでしまい、フォロワーの方に迷惑をかけてしまった。2つのメニュー項目が隣接しているのが問題で、ブロック時の確認メッセージなど一切ない。また、マイリスト画面を開くためには、メニューを開き、項目をクリックするという二段階の動作が必要で、前々から面倒くさいと感じていた。以上の理由で、別の場所に「リストへの追加/削除」ボタンを追加するユーザースクリプトを書くことにした。
面倒くさかったのが、スクリプトの実行タイミング。onloadの時点では上のメニューバーしか読み込まれていない。DOMNodeInsertedをaddEventListenerして、必要な要素以外を弾けばいいようだ。他に方法があれば試してみたい。
なお、自分自身をリストに追加できなくなったため、自分のユーザータイムラインではボタンは表示されない。
インストール
Twitter List Button - userscripts.org
上記リンクよりインストールしてください。
ふみをチャレンジ[6]
時間がない…とりあえず記事の作成だけ。
すっかり忘れてた。早く寝たいのに…
問題
0005: GCD and LCM - AIZU ONLINE JUDGE
結果から先に言うと、正解できてない。したがって以下は不正解の答案を載せてある。
答案
C
#include <stdio.h> long gcd(long, long); long lcm(long, long); int main() { long a, b; while(~scanf("%ld %ld", &a, &b)) { printf("%ld %ld\n", gcd(a, b), lcm(a, b)); } return 0; } long gcd(long m, long n) { long r; while(n) { r = m % n; m = n; n = r; } return m; } long lcm(long m, long n) { return m * n / gcd(m, n); }
反省
ユークリッドの互除法を用いてコードを書いてみたが、結果はWrong Answer。intをlongに換えてみたりしたけど、何が問題なのかよく分からない…今日は早く寝たいので明日また考えることにする。
[追記] (2012-01-13)
もう一度、挑戦した。
#include <stdio.h> int main() { long long unsigned int a, b, m, n, r, gcd, lcm; while(~scanf("%llu %llu", &a, &b)) { m = a; n = b; while(n) { r = m % n; m = n; n = r; } gcd = m; lcm = a * b / gcd; printf("%llu %llu\n", gcd, lcm); } return 0; }
long型にしてたのをlong long unsigned int型に換えたらうまくいった。あと、LCM求めるときにGCDを再度求めてるのが気に食わなかったので、全部をmain関数の中に放り込んである。
ふみをチャレンジ[5]
夜型の生活を1日で改められるわけもなく、お昼で断念して帰ってきた。無駄に体がだるい。
問題
0004: Simultaneous Equation - AIZU ONLINE JUDGE
これだけ妙に正答率が低いという、解く前から不安になるね。
答案
C
#include <stdio.h> int main() { double a, b, c, d, e, f, x, y; while(scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &e, &f) != EOF) { x = (c*e - b*f) / (a*e - b*d) + 0.0; y = (a*f - d*c) / (a*e - b*d) + 0.0; printf("%.3lf %.3lf\n", x, y); } return 0; }
ふみをチャレンジ[4]
三日坊主打破。ロックマンエグゼ2もついに最終話に突入して…ちょっとゲームしすぎかな。明日から大学だというのに。朝起きられるかなあ…
答案
C
#include <stdio.h> int main() { int n, a, b, c; scanf("%d", &n); while(n > 0) { scanf("%d %d %d", &a, &b, &c); a *= a; b *= b; c *= c; if(a == b + c || b == c + a || c == a + b) { printf("YES\n"); } else { printf("NO\n"); } n--; } return 0; }
反省
a2 + b2 = c2を利用すればいいとはすぐ分かったけど、斜辺をどうやって判定しようか…と考えてたら、なるほど、全部ORで繋いじゃったらいいんだ。ソートしたり最大の値を探すことも考えたけど、この方法が一番スマートだね。