たまに「じゃんぬねっと」が生存確認をする日記

役員より労働者の方が絶対楽だと思う

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  984  : 記事  4  : コメント  38441  : トラックバック  277

ニュース

My Website

初心者向けのサイトです。

C# と VB.NET の入門サイト

最近のできごと

低学歴の IT エンジニア兼管理職です。ずっとリモートワーク中。

駆け出しはブラック企業で低年収でしたが、転職を繰り返して年収は 5 倍以上になりました。

年収はこれ以上増えても幸せ指数は増えませんので、趣味の時間を増やすため早期の半リタイアを考えています。

最高の配偶者、可愛い娘、ハンサムな息子と幸せな日々を送っています。

息子の将来の夢はゲーム実況者らしい。がんばれー^^。

Sponsored Link1

Sponsored Link2

Archive

書庫

とうの昔の話ですが、@IT 会議室のスレッドに、このような問題がありました。私は知りませんでしたが、電車の切符の数字で、この遊びをされている世代もいらっしゃるとか...

論理的思考力テスト (atmarkit.co.jp) からの引用

有名な四則演算とカッコで 10 を作る問題です。

2 つの数を組み合わせて 2 桁の数にしたり、累乗、階乗は反則ですよ。順番を変えるのは OK です。

問題例 : 1, 2, 3, 3
解答例 : (3 - 1) x (2 + 3)

レベル 1 : 9, 9, 9, 9
レベル 2 : 1, 1, 9, 9
レベル 3 : 1,1,5,8

答えは、リンク先のスレッド内にあるのでここでは書きませんが、それにしても、この問題は以下の定義を書いておかないといけませんね。

  • 各数字を必ず 1 回ずつ使用すること
  • 四則演算以外は使用禁止 (よって、累乗・階乗は使用禁止)
  • 2 つの数字をつなげて 2 桁にするのは禁止
  • 単項のマイナス演算は禁止

プログラマならではの解き方として、プログラムを組んでしまうという方法があります。これ、Stack クラスを使うと勉強になるかもしれません。そんなわけで、ヒマな方は Stack で解くプログラムを作ってみてください。

関連リンク

投稿日時 : 2006年9月19日 9:36

コメント

# re: 4 つの数字から四則演算のみで 10 を作る方法 2006/09/19 18:31 藤代千尋
mixi の中の Excel コミュでもありました。(^^)
ループで検証するコードは書きましたが、スタックは面倒なので止めておきました。「テンパズル」として有名みたいですね。

# re: 4 つの数字から四則演算のみで 10 を作る方法 [テンパズル] 2006/09/19 18:39 じゃんぬ
>藤代千尋さん
「テンパズル」というのですね。
名前までは知りませんでした。

# re: 4 つの数字から四則演算のみで 10 を作る方法 [テンパズル] 2006/09/19 21:48 うじはら
使っていい型は int 限定にすると、いい練習問題になりそうですね。

# re: 4 つの数字から四則演算のみで 10 を作る方法 [テンパズル] 2006/09/22 13:08 明智重蔵
Oracleで解いてみました

declare
result pls_Integer;
SQL1 varchar2(2000);
begin
for rec in
(with NumList as
(select 1 as Val from dual
union all select 1 from dual
union all select 5 from dual
union all select 8 from dual),
CalcList as
(select '+' as Val from dual
union select '-' from dual
union select '*' from dual
union select '/' from dual)
select a.Val as a,b.Val as b,c.Val as c,d.Val as d,e.Val as e,f.Val as f,g.Val as g
from NumList a,NumList b,NumList c,NumList d,CalcList e,CalcList f,CalcList g) Loop
SQL1 := 'select ' || rec.a || rec.e || rec.b || rec.f || rec.c || rec.g || rec.d || ' from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
end Loop;
end;
/


括弧のパターンは

1 ABCD
2 (AB)(CD)
3 A(BC)D
4 (ABC)D
5 A(BCD)

ですが1のみ対応

こうゆうのはperlが向いてますね
evalなんてのがあるから

# re: 4 つの数字から四則演算のみで 10 を作る方法 [テンパズル] 2006/09/22 13:40 明智重蔵
すみません
修正です

.net版は、誰か作ってください(笑)

declare
result number;
SQL1 varchar2(2000);
begin
for rec in
(with NumList as
(select 1 as Val from dual
union all select 1 from dual
union all select 5 from dual
union all select 8 from dual),
CalcList as
(select '+' as Val from dual
union select '-' from dual
union select '*' from dual
union select '/' from dual)
select a.Val as a,b.Val as b,c.Val as c,d.Val as d,e.Val as e,f.Val as f,g.Val as g
from NumList a,NumList b,NumList c,NumList d,CalcList e,CalcList f,CalcList g
where decode(a.Val,1,1,0)+
decode(b.Val,1,1,0)+
decode(c.Val,1,1,0)+
decode(d.Val,1,1,0) = 2
and 5 in (a.Val,b.Val,c.Val,d.Val)
and 8 in (a.Val,b.Val,c.Val,d.Val)
) Loop
begin
SQL1 := 'select ' || rec.a || rec.e || rec.b || rec.f || rec.c || rec.g || rec.d || ' from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
exception
when others then
null;
end;
begin
SQL1 := 'select (' || rec.a || rec.e || rec.b || ')' || rec.f || '(' || rec.c || rec.g || rec.d || ') from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
exception
when others then
null;
end;
begin
SQL1 := 'select ' || rec.a || rec.e || '(' || rec.b || rec.f || rec.c || ')' || rec.g || rec.d || ' from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
exception
when others then
null;
end;
begin
SQL1 := 'select (' || rec.a || rec.e || rec.b || rec.f || rec.c || ')' || rec.g || rec.d || ' from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
exception
when others then
null;
end;
begin
SQL1 := 'select ' || rec.a || rec.e || '(' || rec.b || rec.f || rec.c || rec.g || rec.d || ') from dual';
execute immediate SQL1 into result;
if result = 10 then
DBMS_Output.Put_Line(SQL1);
end if;
exception
when others then
null;
end;
end Loop;
end;
/


# re: 4 つの数字から四則演算のみで 10 を作る方法 [テンパズル] 2006/11/24 11:07 けん
.net版作りました。といってもほぼべた書きですが・・・

'演算子
Enum Enzanshi
Plus = 1 '+
Minus = 2 '-
Times = 3 '×
Par = 4 '÷
End Enum

'計算ボタンクリック時
Private Sub btnClac_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClac.Click

Dim Pattern As Integer '計算式パターン
Dim Enzan1 As Enzanshi '演算子1
Dim Enzan2 As Enzanshi '演算子2
Dim Enzan3 As Enzanshi '演算子3

Dim BeforeValue(4) As Integer
Dim AfterValue(4) As Integer

BeforeValue(1) = CInt(txtValue1.Text)
BeforeValue(2) = CInt(txtValue2.Text)
BeforeValue(3) = CInt(txtValue3.Text)
BeforeValue(4) = CInt(txtValue4.Text)

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer

Dim AnsTemp1 As Double '答え(一時保存)
Dim AnsTemp2 As Double '答え(一時保存)
Dim Ans As Double '答え

'一つめの数値
For i = 1 To 4
AfterValue(1) = BeforeValue(i)
'二つめの数値
For j = 1 To 4
If i <> j Then
AfterValue(2) = BeforeValue(j)
End If
'三つめの数値
For k = 1 To 4
If i <> j And i <> k And j <> k Then
AfterValue(3) = BeforeValue(k)
'四つめの数値
For l = 1 To 4
If i <> j And i <> k And i <> l And j <> k And j <> l And k <> l Then
AfterValue(4) = BeforeValue(l)

'パターン毎にループ
For Pattern = 1 To 4
'一つめの演算子
For Enzan1 = 1 To 4
'二つめの演算子
For Enzan2 = 1 To 4
'三つめの演算子
For Enzan3 = 1 To 4
'答えの初期化
Ans = 0
'計算式のパターン
Select Case Pattern
Case 1
'(A Enzan1 B) Enzan2 (C Enzan3 D)
AnsTemp1 = Enzan(AfterValue(1), AfterValue(2), Enzan1)
AnsTemp2 = Enzan(AfterValue(3), AfterValue(4), Enzan3)
Ans = Enzan(AnsTemp1, AnsTemp2, Enzan2)
Case 2
'A Enzan1 (B Enzan2 C) Enzan3 D
AnsTemp1 = Enzan(AfterValue(2), AfterValue(3), Enzan2)
If Enzan1 >= Enzan3 Then
AnsTemp2 = Enzan(AfterValue(1), AnsTemp1, Enzan1)
Ans = Enzan(AnsTemp2, AfterValue(4), Enzan3)
Else
AnsTemp2 = Enzan(AnsTemp1, AfterValue(4), Enzan3)
Ans = Enzan(AfterValue(1), AnsTemp2, Enzan1)
End If
Case 3
'(A Enzan1 B Enzan2 C) Enzan3 D
If Enzan1 >= Enzan2 Then
AnsTemp1 = Enzan(AfterValue(1), AfterValue(2), Enzan1)
AnsTemp2 = Enzan(AnsTemp1, AfterValue(3), Enzan2)
Else
AnsTemp1 = Enzan(AfterValue(2), AfterValue(3), Enzan2)
AnsTemp2 = Enzan(AnsTemp1, AfterValue(1), Enzan1)
End If
Ans = Enzan(AnsTemp2, AfterValue(4), Enzan3)
Case 4
'A Enzan1 (B Enzan2 C Enzan3 D)
If Enzan2 >= Enzan3 Then
AnsTemp1 = Enzan(AfterValue(2), AfterValue(3), Enzan2)
AnsTemp2 = Enzan(AnsTemp1, AfterValue(4), Enzan3)
Else
AnsTemp1 = Enzan(AfterValue(3), AfterValue(4), Enzan3)
AnsTemp2 = Enzan(AfterValue(2), AnsTemp1, Enzan2)
End If
Ans = Enzan(AfterValue(1), AnsTemp2, Enzan1)
End Select

'答えが10のとき処理終了
If Ans = 10 Then
'答えを出力
EnzanKekka(Pattern, AfterValue, Enzan1, Enzan2, Enzan3)
Exit Sub
End If

Next
Next
Next
Next

End If
Next
End If
Next
Next
Next


End Sub

Private Function Enzan(ByVal Atai1 As Double, ByVal Atai2 As Double, ByVal Enzanshi As Enzanshi) As Double
Select Case Enzanshi
Case Enzanshi.Plus
Return Atai1 + Atai2
Case Enzanshi.Minus
Return Atai1 - Atai2
Case Enzanshi.Times
Return Atai1 * Atai2
Case Enzanshi.Par
Return Atai1 / Atai2
End Select
End Function

Private Function ToEnzanshi(ByVal Enzan As Enzanshi) As String
Select Case Enzan
Case Enzanshi.Plus
Return "+"
Case Enzanshi.Minus
Return "-"
Case Enzanshi.Times
Return "*"
Case Enzanshi.Par
Return "/"
End Select
End Function


Private Sub EnzanKekka(ByVal Pattern As Integer, ByVal AfterValue() As Integer, _
ByVal Enzan1 As Enzanshi, ByVal Enzan2 As Enzanshi, ByVal Enzan3 As Enzanshi)
'1 ABCD()
'2 (AB)(CD)
'3 A(BC)D
'4 (ABC)D
'5 A(BCD)

txtAnswer.Text = ""

If Pattern = 1 Or Pattern = 3 Then
txtAnswer.Text &= "("
End If

txtAnswer.Text &= AfterValue(1)

txtAnswer.Text &= ToEnzanshi(Enzan1)

If Pattern = 2 Or Pattern = 4 Then
txtAnswer.Text &= "("
End If

txtAnswer.Text &= AfterValue(2)

If Pattern = 1 Then
txtAnswer.Text &= ")"
End If

txtAnswer.Text &= ToEnzanshi(Enzan2)

If Pattern = 1 Then
txtAnswer.Text &= "("
End If

txtAnswer.Text &= AfterValue(3)

If Pattern = 2 Or Pattern = 3 Then
txtAnswer.Text &= ")"
End If

txtAnswer.Text &= ToEnzanshi(Enzan3)

txtAnswer.Text &= AfterValue(4)

If Pattern = 1 Or Pattern = 4 Then
txtAnswer.Text &= ")"
End If

End Sub

# KIJYmgXLyhxNVbbHP 2021/07/03 2:08 https://amzn.to/365xyVY
thing to be aware of. I say to you, I certainly get

# re: 4 ????????????? 10 ????? [?????] 2021/08/09 0:11 when was hydroxychloroquine first used
cholorquine https://chloroquineorigin.com/# hydroclorizine

# pSlftSdCnCcuJBhcx 2022/04/19 11:08 johnansaz
http://imrdsoacha.gov.co/silvitra-120mg-qrms

# fbzgdbf@softbank.jp 2022/05/22 18:32 ロレックス 偽物 輸入
ルイヴィトン - N級バッグ、財布 専門サイト問屋
弊社は販売バッグ、財布、 小物、靴類などでございます。
1.当社の目標は品質第一、信用第一、ユーザー第一の原則を守り、心地よい親切で最高のインターネットサービスご提供することです。
2.品質を重視、納期も厳守、信用第一は当社の方針です。
3.弊社長年の豊富な経験と実績があり。輸入手続も一切は弊社におまかせてください。質が一番、最も合理的な価格の商品をお届けいたします。
4.お届け商品がご注文内容と異なっていたり、欠陥があった場合には、全額ご返金、もしくはお取替えをさせていただきます。
弊社は「信用第一」をモットーにお客様にご満足頂けるよう、
送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。
是非ご覧ください!
休業日: 365天受付年中無休
ロレックス 偽物 輸入 https://www.2bcopy.com/product/product.aspx-id=7528.htm

# hydroxychloroquine for sale mexico shipping 2022/12/27 12:18 MorrisReaks
hydroxychloroquine pills https://www.hydroxychloroquinex.com/

Post Feedback

タイトル
名前
Url:
コメント: