ページ 1 / 1
条件分岐を使用しない数値の大小比較
Posted: 2011年2月09日(水) 21:27
by 佐藤
初めて質問します。よろしくお願いします。
このまえ、学校の授業で問題を出されました、その問題の内容は、
「引数を2つわたして、条件分岐やfor文while文を使わずに大きい方の数値を返す関数を作れ」
というものでしたが、どうすれば良いのか全くわかりません。
どなたか、わかるようでしたら教えてほしいです。
Re: 条件分岐を使用しない数値の大小比較
Posted: 2011年2月09日(水) 21:50
by Tatu
思いついたので問題です。
a*b=6,a+b=5
であるとき、a,bのうち大きいほうの値はいくらか。
今回は簡単な答えからつくったが他の値でも
考えられるように導出法も考えること。
ヒント:x=a,bとなるようなxの二次方程式
Re: 条件分岐を使用しない数値の大小比較
Posted: 2011年2月09日(水) 22:52
by 佐藤
返信ありがとうございます。
2次方程式なんて久しぶりに聞いたので全然覚えてないです。
(x-a)(x-b) = 0
x^2-ax-bx+ab = 0
x^2-(a+b)x+ab = 0
a+b = 5 , a*b = 6から
x^2-5x+6 = 0
↑を因数分解して
(x-2)(x-3) = 0
x = 2 , 3
↑から
aとbで大きいのは3? ってことでいいんでしょうか?
Re: 条件分岐を使用しない数値の大小比較
Posted: 2011年2月09日(水) 23:03
by フリオ
比較演算子(<、>、<=、>=)は結果が真なら1、偽なら0を返します。
解決しました
Posted: 2011年2月09日(水) 23:17
by 佐藤
返信ありがとうございます。
比較演算子の真(1)、偽(0)で気づきました。
int Func(int a , int b){
return (a*(a>=b))+(b*(b>a));
}
でうまくいったみたいです。
みなさん本当にありがとうございました。
Re: 条件分岐を使用しない数値の大小比較
Posted: 2011年2月09日(水) 23:42
by Tatu
私が考えていたのと順番を逆に考えましたか。
(x-a)(x-b)=0という形になり、
展開するとx^2-(a+b)x+ab=0となるので
解の公式よりa,bのうち、大きいほうはx=( (a+b) + sqrt( (a+b)*(a+b) - 4*a*b ) )/2.0
である。と書くつもりだったのですが。
条件分岐は禁止されていても条件式は禁止されていませんでした。
Re: 条件分岐を使用しない数値の大小比較
Posted: 2011年2月10日(木) 09:19
by maru
条件分岐を使わないという制約条件がよく分からないのですが、大きいほうを返す関数っては、普通は
コード:
int max(int a, int b)
{
return a > b ? a : b;
}
とします(というか、このようにマクロで定義されていたりテンプレート関数で定義されている)。
3項演算子は条件分岐なのかなぁ?