• 締切済み

数学的な処理

プログラムで次の処理をしたいのですが、どうすればよいでしょうか。計算部分をどのように書けば良いかわかりません。 1桁の整数a,b,c,dがあります。 条件は、 a<b<c<d かつ 1≦a,b,c,d≦9です。 このとき、 a,b,c,d の数字間に四則演算符号+-*/を入れ、結果が10になるようにします。整数は順序を入れ替えてもかまわず、()を利用して計算の順序を制御してもかまいません。同じ整数は2度使えません。 結果は数式で表示します。 例: 1+2+3+4=10 (1,2,3,4) 2*3+5-1=10 (1,2,3,5) (3-7/4)*8=10 (3,4,7,8) など。 よろしくおねがいします。

みんなの回答

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

少しだけヒントを。 1)a,b,c,dの決め方は1111から9999までの数をループで発生させて 4桁に分解し条件に合わない組み合わせを捨てればよいでしょう。 2)括弧の扱いは大変なので、まず*/より強い+-を定義して 演算子を6種類にするといいと思います。 一番最後の段階で強い+-を括弧に変換すればいいでしょう。 3)演算子の組み合わせは6*6*6種類ですので これをしらみつぶしで当てはめればいいでしょう。 簡単にやるには3重ループを使うことですね。 がんばってください。

shinmailg
質問者

補足

大変参考になります。まだ、強い+-の定義方法が分かりません。括弧の存在があると複雑に感じてしまいます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

懐かしい記憶がw…言語は違いますが過去の自分の場合自力では出来ませんでしたとも。 というからではないですが、答えを書くつもりはありません。なんといっても作成する過程に意味があるのだと思います。 # っていうかPG経験ない人間がやる最初の課題だとすると、そもそも自力で解くのは無理な話しかもしれんです。記憶によるとほとんどの人は出来る人に教えてもらいながらだったな… # ま、この課題はプログラムというよりお勉強だが で、数字に対応する数式を返す関数を作成する場合と、条件に合う数式と数字のセットを全て返す場合では違いがでるとは思いますが、プログラムとしてのアプローチとしては、中身の無い関数を作成してその後、充実させてゆくのがいい。 こんな風な単純なとこから初めればいいです。 // ダミー関数(入力値に対する数式を返す) public String getIntTen(int a,int b,int c,int d) { String retIntTen = ""; // 略 return retIntTen; } ヒント1:switch~case文は役に立ちそう。 ヒント2:結構、標準的な数学の問題である。プログラムの前にどういう演算をするかをやってみよう。(純粋に数学として) アドバイスとしては、こういう課題は(仲間と…いなければ、よい機会なので仲間を作る)協力しあってやるのがいいと思う。意見をぶつけ合い、コミュニケーションを図ること…これはエンジニアにとって重要なことですし。

shinmailg
質問者

補足

ご回答ありがとうございます。まずは基本的な数学の問題として解いてみます。そして、もう少し勉強してみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPの四則演算について

    整数が代入される変数が5つ($a $b $c $d $e $f)あります。 整数の範囲はそれぞれの変数でバラバラです。 $aが1から10まで $bが1から200まで $cが1から50まで といった具合です。 PHPで全ての変数を四則演算して1から46の範囲に収めたいと思っています。 いったいどのような数式にしたら良いのでしょうか?

    • ベストアンサー
    • PHP
  • 数学A 重複するものについて

    1 2 3 4 5 6 7 8 9の9個の数字の中から重複を許して4個を選んで4桁の整数を作り、千の位、百の位、十の位、一の位をそれぞれa b c dとする つぎの各条件を満たす整数はそれぞれ何個あるか (1)a≦b≦c≦dである整数 (2)a≦b≦c≦dであり、3つの≦の少なくとも1つは=である 回答よろしくお願いします

  • 数学の証明…

    問題:各位の数字の和が3の倍数である整数は3の倍数である。    このことを3桁の整数について証明せよ。    ヒント:3桁の整数をNとするとN=100a+10b+c(a b c は0から9までの整数、a≠0)とおける。 しっくりいくように書けません。 どなたか、お手本をお願いします<(_ _)>

  • 文字式の証明

    どうしても分からない問題があるので教えてください。 「千の位の数字がa、百の位の数字がb、十の位の数字がc、一の位の数字がdである4桁の整数があります。 a+b+c+dが3でわり切れるとき、この4桁の整数は3でわり切れることを示しなさい。」 千の位の数字がa、百の位の数字がb、十の位の数字がc、一の位の数字がdである4桁の整数は1000a+100b+10c+dで、これとa+b+c+dが3でわり切れるということは、この2つは3の倍数であるということですよね? これしか分かりません。 何かヒントをください。お願いします。

  • 配列128桁の加算、減算について。

    現在C言語で四則演算について勉強しています。 128桁の配列をもつ整数についてa,b,各桁を加算、減算するプログラムを書きたいのですが分からなくて困ってます。できればCのソースを教えて欲しいですおねがいします。  s = 65536 a[128],b[128],c[128]   i = -1 とする。  i <128 である限り、演算を実行。 i >127なら終わり。(++1) c(i) = a(i) - b(i)という演算を行う。 c(i) < 0 の場合 s を借りてくる。 c(i)に s を加算し、上の桁から1を引く。  

  • C言語で四則演算を使って結果が10になる数式

    C言語のプログラミングについて質問です。 四つの一桁の数字を入力して四則演算を使って結果が10になる数式を作りたいのですが、イメージが湧きません。 教えていただけますか? 例:1234enterkey 答え2*3+1*4 数値の変数はint型でお願いします。int型ですので小数点以下を使って10になる結果は出さなくて宜しいです。お願いします。

  • IF関数

    細かい質問になってしまって申し訳ないのですが、 「Aのセル-Bのセル」という計算式をCのセルに入れたとします。 Cのセルの計算結果が A-B=整数(プラス)の場合と A-B=負の整数(マイナス)の場合 が考えられると思うのですが、マイナスの計算結果になった場合、 赤字&()で数字を囲われた (計算結果○○) と表示されてしまいます。 普通に計算結果を -計算結果○○ と出したいとき、数式はなんといれればよいでしょうか? 例 5-3=2 5-6=(1) と表示されてしまうので、「(1)」ではなく「-1」と表示させたい。 この時、Cのセルに入れる数式をどのようにすればよいか、 教えてください。 お願いします。

  • 数学の問題(組み合せ)

    数学の問題でどうしてもわからないところがあります 出来れば考え方なども教えていただければ嬉しいです (問題) 4桁の整数nの千の位、百の位、十の位、一の位の数字をそれぞれa、b、c、dとする 次の条件を満たすnは何個あるか? (1)a>b>c>d          (2)a≧b>c>d よろしくお願いします

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • 有効数字の取り扱い

    ある実験で最終結果を有効数字3桁にしたい場合を考えます。 物理量A(複数回測定)、B(1回のみ測定)、C(Aに同じ)があり、それらの有効数字は A:5桁 B:3桁 C:4桁 で、 平均値の有効数字が A:6桁 C:7桁 になるとします。 A、B、Cを計算してDという物理量を求める場合、 (1)有効桁数を考えずに途中計算を行い、最終結果のみを3桁にする。 (2)A、Cの平均値を有効数字を合わせながら((a)Aは測定値の5桁、Cは6桁にor(b)A、Cともに3桁に)行う。 のどちらが正しいのでしょうか。