「牛の舌って薄いんですね」

蒼樹うめ『ひだまりスケッチ』第 6 巻「一頭から一枚」より

ふみをチャレンジ[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;
}

反省

ガウスジョルダン法とか、連立方程式の解き方はいくつかあるみたいだけど、難しいそうだったので、普通に方程式解いてみた。最初、Wrong Answerを食らったが、以下の記事のように、0.0を付加すると通った。なんでーーー

AOJ 0004 Simultaneous Equation - Code Court

ふみをチャレンジ[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で繋いじゃったらいいんだ。ソートしたり最大の値を探すことも考えたけど、この方法が一番スマートだね。

ふみをチャレンジ[3]

とりあえず3日間やって来れた。三日坊主打破まであと1日。でも問題は明後日以降かな、大学始まるし。実はもう始まってるんだけど。ロックマンエグゼ2のハードモードが意外と難しい…
あと、ですます調やめた。

問題

0002: Digit Number - AIZU ONLINE JUDGE

桁数を求めるには、

figure = (int)log10( variable ) + 1

みたいにすればいいってここに書いてあったから、それを利用した。

答案

C
#include <stdio.h>
#include <math.h>

int main() {
  int a, b, sum, digit;
  
  while(scanf("%d %d", &a, &b) != EOF) {
    sum = a + b;
    digit = (int)log10(sum) + 1;
    printf("%d\n", digit);
  }
  
  return 0;
}

反省

問題分の「入力の終わりまで処理して下さい」の意味がわからなくて、whileを無限ループにして提出したらTime Limit Exceededだと言われた。AOJのWEB Boardで確認すると、

while(scanf("%d", &n) != EOF) {
  /* ここに処理 */
}

こういうことだったそうだ。なるほど。
後ろの方の問題をチラッと見たら、かなり難しそうなんだけど大丈夫かな…

ふみをチャレンジ[2]

ふみをチャレンジ2日目。せっかくなのでAOJに登録してみました。機械判定してくれるので便利ですね。foooomioが僕なので、見かけたらどうぞ笑ってやって下さい。

答案

C
#include <stdio.h>

int main() {
  int a[10], i, num1, num2, num3;
  num1 = num2 = num3 = 0;
  
  for(i = 0; i < 10; i++) {
    scanf("%d", &a[i]);
    if(num1 <= a[i]) {
      num3 = num2;
      num2 = num1;
      num1 = a[i];
    } else if(num2 <= a[i]) {
      num3 = num2;
      num2 = a[i];
    } else if(num3 <= a[i]) {
      num3 = a[i];
    }
  }
  
  printf("%d\n%d\n%d\n", num1, num2, num3);
  
  return 0;
}

反省

ソートした方が簡単かと思った(Javaで作ったときはそうした)けど、比較関数書かないといけなかったりするそうなので、単純に上位3つだけを求めることにした。なんか他に方法ないかなあ。

ふみをチャレンジ[1]

あけましておめでとうございます。
「継続は力なり」ということで、毎日ひとつ簡単なプログラムを組むことにしました。Twitterを眺めていると、AIZU ONLINE JUDGE: Programming Challengeなるものがあるそうなので、ここの問題をまずは解いていこうと思います。

問題

0000: QQ - AIZU ONLINE JUDGE
九九を出力できればいいみたいです。

答案

C
#include <stdio.h>

int main() {
  int i, j;
  
  for(i = 1; i <= 9; i++) {
    for(j = 1; j <= 9; j++) {
      printf("%dx%d=%d\n", i, j, i*j);
    }
  }
  
  return 0;
}

/* 結果
 1x1=1
 1x2=2
 .
 .
 (省略)
 .
 .
 9x8=72
 9x9=81 */
Java
class QQ {
  public static void main(String[] args) {
    for(int i = 1; i <= 9; i++) {
      for(int j = 1; j <= 9; j++) {
        System.out.println(i+"x"+j+"="+(i*j));
      }
    }
  }
}

// 結果
// (Cと同じ)

反省

ドヤ顔で書いた最初のプログラムが題意に即してなかった。問題をちゃんと読もう。
はてな記法わからん。

こんな調子で続けていきたいと思います。三日坊主にならぬよう…