- ベストアンサー
プログラムで計算する方法
計算プログラムを使い、ある計算をしようと思ったのですが 私は文系のため、どんなソフトを使ってどんな等式を使えばいいのかわからえず困っています。 フリーソフトを使った計算に詳しい方、教えてください。 計算する問題は以下の三つです。 (1) 2の40乗ー1分は何年? (2) 一分の一+二分の一+三分の一……49分の1=何分の何? (3) 1~1500までの中で3の倍数と3のつく数字はいくつ? 特に三番が鬼門で、プログラムを組まないとまったく出来ないそうです。 数学がさっぱりな私に、助言お願いいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
(1) http://www.google.co.jp/search?hl=ja&q=2%5E40-1&lr= で出た答えが「分」だから、それを60で割ったのが「時間」。 時間を24で割ったのが「日数」。 1年は約365.2425ですから、日数を365.2425で割ったのが年数。 http://www.google.co.jp/search?num=100&hl=ja&newwindow=1&safe=off&q=1099511627775%2F60%2F24%2F365.2425&lr= が答え。 「1分間に1枚の板が移動する、板が40枚あるハノイの塔が移動を完了するには、2090528年と68日11時間17分かかる」のです。 (2) 「(1/1)+(1/2)」は「(2/2)+(1/2)」です。つまり「(2+1)/2」です。 「(1/1)+(1/2)+(1/3)」は「(6/6)+(3/6)+(2/6)」です。つまり「(2×3+3+2)/(2×3)」です。 「(1/1)+(1/2)+(1/3)+(1/4)」は「(24/24)+(12/24)+(8/24)+(6/24)」です。つまり「(2×3×4+3×4+2×4+2×3)/(2×3×4)」です。 「(1/1)+(1/2)+(1/3)+(1/4)+(1/5)」は「(120/120)+(60/120)+(40/120)+(30/120)+(24/120)」です。つまり「(2×3×4×5+3×4×5+2×4×5+2×3×5+2×3×4)/(2×3×4×5)」です。 これで「何か、法則が見えて来た筈」です。 分母は「2から49を全部掛けた数」ですね。分子は…。最後に約分するのをお忘れなく。 (3) 3の倍数は500個。 「3の付く数字」とは「1の位が3」または「10の位が3」または「100の位が」です。 「1の位が3」は、10個につき1個あります。1500個の中に150個。 「10の位が3」は、100個につき10個あります。1500個の中に150個。 「100の位が3」は、1000個につき100個あります。1500個の中に200個。 単純に足すと500個です。 このうち「1の位と10の位が3」は1500個の中に15個。重複してるので引きます。 同様に「1の位と100の位が3」は1500個の中に20個。重複してるので引きます。 同様に「10の位と100の位が3」は1500個の中に20個。重複してるので引きます。 但し1500個の中に2個ある「1の位と10の位と100の位が3」は、2重に引かれてしまうので、足します。 すると、答えは、150+150+200-15-20-20+2=447で「3が付く数字は447個」です。
その他の回答 (7)
#6です。 「3の倍数か3のつく数字のどちらかである数字」という事であれば else if(1000の位*1000 + 100の位*100 + 10の位*10 + 1の位)÷3 の余りが0なら a=a+1 を真ん中のループに付け加えましたところ、a=798でした。 「3の倍数であり3のつく数字」なら、andにして a=149。
- ahirudac
- ベストアンサー率46% (84/180)
私も3だけですがEXCELでやってみました。 [3の倍数]:結果は500でした ・余りが0になる数を数えれば良いので、回答者の皆様と同じ様にMOD関数の結果が0になるものをCOUNTIF関数で集計。 [3のつく数字]:結果は447でした ・FIND関数で3の位置を検索。3を含んでない物は「#VALUE!」となるので、IFERROR関数でその場合を0に変換。0のセルをカウントした結果を1500から引く。 これはそれぞれの数ですが、「3の倍数かまたは3の付く数字」ということであれば798になるのだと思います(やってはいないですが)。
(3) 「3のつく数字」ですが、もっと単純に a=0; 1000の位のループ(0~1); 100の位のループ(0~9、1000の位が1なら0~4); 10の位のループ(0~9); 1の位のループ(0~9); if (100の位=3) or (10の位=3) or (1の位=3)なら a = a+1 ループ閉じ ループ閉じ ループ閉じ ループ閉じ でよろしいのではございませんでしょうか(これだと1500自体をカウントしないのですが、そこは略で^^;)。 #3さん同様、a= 447 でした。
- suzu_zou
- ベストアンサー率34% (112/327)
3は面白そうなので、やってみました。 3の倍数と3のつく数字を数えるカウンタ…(1) 1から1500まで数えるカウンタを用意…(2) (2)のカウンタをループでカウントアップ。 そのループの中で、(2)が3で割り切れる場合、(1)をカウントアップ。 「そうでなくて」数字の中に"3"が1個でも含まれていたら(1)をカウントアップ。 (1)が答えなのですが、私も798になりました。 私はJavaでやりましたが、JavaScriptでも同じようなことができると思います。 (ソフトは特に必要なく、ブラウザがあれば実行できる)
- pascal3141
- ベストアンサー率36% (99/269)
(3)だけエクセルでやってみます。 A列 1~1500の数値を代入。以下B列~k列の一行目に以下の式を入れましょう。 B列 =INT(MOD(A1/1000,10)):千の位を出す C列 =INT(MOD(A1/100,10)):百の位を出す D列 =INT(MOD(A1/10,10)):十の位を出す E列 =INT(MOD(A1,10)):一の位を出す F列 =IF(MOD(A1,3)=0,1,""):3の倍数なら1、それ以外は空白 G列 =IF(B1=3,1,""):千の位の数字が3なら1、それ以外は空白 H列 =IF(C1=3,1,""):百の位の数字が3なら1、それ以外は空白 I列 =IF(D1=3,1,""):十の位の数字が3なら1、それ以外は空白 J列 =IF(E1=3,1,""):一の位の数字が3なら1、それ以外は空白 K列 =IF(SUM(F1:J1)>0,1,""):F~J列の合計が0より大きい(3が入っている)なら1,それ以外空白 これを、下に1500行までコピー。 最後に、k列の合計を出せば、3が入っている数字の個数が出てきます。計算では798個になったのですが。#3さんと違うので間違っていたらごめんなさい。
- 10ken16
- ベストアンサー率27% (475/1721)
(3) 1~1500までを書いて ・3で割ったあまりが0 ・1の位が3 ・10の位が3 ・100の位が3 それで、全てfalseを数え上げ。 exact、mod、rightなどを使えばOK
- SAYKA
- ベストアンサー率34% (944/2776)
え、3は手で求めちゃだめなの?
お礼
詳しい解説ありがとうございます。 なるほど……そうやって計算すれば算出できるんですね。 ありがとうございました。勉強になります。