プログラムの実行結果は以下の通り。
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; }