プログラムの実行結果は以下の通り。
5
□に何を設定しても結果は5になる。
5▲(8▼(1▲(4▼□)))=5
プログラムのソースは以下の通り。
#include "puzutl.h"
class uval { // 数値(可能性のある値を最小値,最大値の範囲で持つ)
public:
uval() { // 何も指定しないときは可能性のある最小値,最大値の組み合わせ
m_min = INT_MIN;
m_max = INT_MAX;
}
uval( int val) { // 値が決まっているので最小値=最大値
m_min = val;
m_max = val;
}
uval( int min, int max) { // 値が範囲で決まっている
assert(min<=max);
m_min = min;
m_max = max;
}
int getmin() { return m_min;} // 範囲の最小値を取得する
int getmax() { return m_max;} // 範囲の最大値を取得する
int getval() { // 値を取得する
if( m_min == m_max) return m_min;
pe( "Unknown value range %d, %d", m_min, m_max);
return 0;
}
private:
int m_min; // 範囲の最小値
int m_max; // 範囲の最大値
};
uval calmin( uval x, uval y) // 2つの数の小さい方を取得する
{
return uval(min(x.getmin(),y.getmin()),
min(x.getmax(),y.getmax()));
}
uval calmax( uval x, uval y) // 2つの数の大きい方を取得する
{
return uval(max(x.getmin(),y.getmin()),
max(x.getmax(),y.getmax()));
}
int main( int argc, cstring argv[])
{
ps( "%d\n", calmax(5,calmin(8,(calmax(1,calmin(4,uval()))))).getval()); // uval()は値が不明の場合
return 0;
}