質問<264>2000/5/29
金子というHNで投稿させていただいたものですが 自分も問い2(2)を考えてみて・・・最終的にこういうプログラムを立てた のですが減点対象になるでしょうか? void main(void) { int x1,x2,x3,s=0; for(x1=1;x1<=13;x1++){ for(x2=1;x2<=13;x2++){ for(x3=1;x3<=13;x3++){ if((x1*x2+x2*x3+x3*x1)%13==1) s++; } } } printf("s = %d",s); } 実行結果 s = 182 やはり解答としてはふさわしくないですよね(^^; あともう1問わからないものがあるので(一体いくつあるんだ!!)、ここに 書いても宜しいでしょうか? [問題A] 一辺の長さが1の正四面体OABCがあり、 OA(ベクトル)=a(ベクトル) OB(ベクトル)=b(ベクトル) OC(ベクトル)=c(ベクトル)とおく。 四面体OABCの内部では直進し、四面体の各面で反射の法則にしたがって 反射する点Pがある。PがOをスタートし、一回目は⊿ABCの内部(辺上 の点は除く)で反射し、二回目は⊿OAB.⊿OBC.⊿OCAの内部(辺 上の点は除く)のいずれかで反射した後、3回目にぶつかったところで止ま るものとする。 このとき⊿OAB上の点で三回目にPが到達できる部分を図示せよ
お返事2000/5/30
from=武田
c言語によるプログラムは大変良いと思います。 しかし、テストとなると、ダメでしょうね。 私としてはプログラム点をあげたいですね。 [問題A] これも難問です。未解決問題のコーナーに移しました。 そのあとすぐ質問者(金子さん)から解答が分かった旨連絡と解答が寄せら れたので、次にお便りを掲載します。
お便り2000/6/1
from=金子
金子です。 未解決問題の一番目、ベクトルの問題は考えた結果とくことができました。 ここに概要を書かせていただきます。 「反射」ときたら、同じ図をくっつけて真っ直ぐ通過させる。これは平面図形 でよく使う手法で立体でも同じである。まず、⊿ABCの内部で反射するということは、上の図の四面体O'ABC の内部へ直進していくのと同じこと。2回目の反射も同様。四面体O'ABC を通り過ぎて四面体O'A'BC、四面体O'AB'C、四面体O'ABC'のどれ かの内部へと直進して行くことになる。 したがって、本問は「⊿OAB上の点で三回目にPが到達できる部分」を探 す問題を、実際は「Oを出発点とし、⊿ABCの内部を通過する直線が ⊿OA'B or ⊿OAB'に到達する部分」を探す問題と書き換える。
正四面体OABCの各辺を2倍に拡大した四面体OXYZを書き足した。(※ 2倍じ ゃなくてもOK。)なお、点Dは辺BCの中点、点Eは線分ODの延長線と O'A'の交点。 一回目は⊿ABCの内部を通過するはずだから、その直線は四面体OXYZの外 には出ない。しかし、上の図を見れば分かるように、四面体O'A'BCには四面体 OXYZの外に出ている部分が存在する。つまり、そこが直線の到達しない部分と いうこと。(※ 四面体O'AB'Cについても同様なため、説明は省略。) 次に点Eについて、 ベクトルOO'、ベクトルOA'、ベクトルODをそれぞれa(ベクトル)、 b(ベクトル)、c(ベクトル)を使って表す。(以下「ベクトル」省略) OEをOO'、OA'、ODを使って2通りの方法で表す。 (例 OE=tOA'+(1-t)OO' OE=sOD) それに1でだした答えを代入する。 2つの式の係数を比較すれば完了。 これでO'E : EA'=6 : 5 になるのであとはそれを⊿OAB上に 図示すればよい。
したがって図の緑色の部分(赤い線とOは含まず)……(おわり)