Problem 177
コンテンツ
http://projecteuler.net/index.php?section=problems&id=177
対称性のチェックが大変。
素直な全探索なのでjavaにした。
賢い探索もあるみたいだが、やはり対称性の除外が面倒そう。
public class P177{ public static void main(String[] args){ int count=; double[] sin = new double[180],cos = new double[180]; for(int i=; i<180; sin[i]=Math.sin(Math.toRadians(i)),cos[i]=Math.cos(Math.toRadians(i++))); for(int alpha = 2;alpha<=90;alpha++) for(int diagB = 1; diagB< 180-alpha ; diagB++){ double ad = sin[diagB]/sin[alpha+diagB]; for(int beta = Math.max(alpha,diagB+1); beta <= 180-alpha ; beta++) for(int diagA = beta==alpha?diagB:1 ; diagA < Math.min(alpha,180-beta); diagA++){ double ac = sin[beta]/sin[beta+diagA]; double x = Math.toDegrees(Math.atan2(sin[diagA]*ac-sin[alpha]*ad,cos[diagA]*ac-cos[alpha]*ad)); int rx = (int)Math.round(x); int delta = 180-alpha+rx, gamma = 180-beta-rx; if(gamma < alpha) break; if(delta < beta) continue; if((beta==delta)&&(diagA > alpha/2)) continue; if((gamma==alpha)&&(diagB > beta/2)) continue; if(Math.abs(x-rx) < 1.0E-10)count++; } } System.out.println(count); } }
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)