0

7 を指定すると 5 を返し、5 を指定すると 7 を返す関数が必要ですが、条件文は使用できません。10 種類の手法 (すべて条件文なし) でそれが必要です。

ただし、5つの異なる方法で実装しました。あなたが他の5つを書くのを手伝ってくれたら、それは喜びです:)

int returner( int input ) {
    return 12 - input;
}


int returner( int input ) {
    if(input != 0) {
        return 35 / input;
    }
    return 0;
}


int returner( int input ) {
    return input ^= 2;
}


int returner( int intput ) {
    return ( 7 % input ) + 5;
}

そして最後に、ルビーで

def returner(input)
    return ([5,7]-[input]).pop
end
4

3 に答える 3

2

ここにさらに5つあります:

p RUBY_VERSION
require 'set'

def fun1(x)

 [5,7].to_set.delete(x).to_a[0]

end

p fun1(7)

def fun2(x)

 a = [5,7].to_set
 b = [x].to_set
 p a.difference(b).to_a[0]

end

fun2(5)

def fun3(x)

 a = [5,7]
 a.slice!(a.index(x),1)
 p a[0]

end

fun3(5)

def fun4(x)
 a = [5,7]
 a.delete(x)
 p a[0]
end

fun4(5)

def fun5(x)

 a = '57'
 a = a.rpartition(7.to_s)
 p a[a.index(7.to_s)].to_i

end

fun5(7)

出力:

"2.0.0"
5
7
7
7
5
于 2013-03-27T18:59:19.357 に答える
2

これは素晴らしい質問だとは思いませんが、ここでいくつかの異なるアイデアを学ぶ機会があると思います. i入力を表します。i=7入力として「その他」を使用して、次のことを試してください。これらのアプローチはいずれも、入力値に対して数学を使用しないことに注意してください。

注: これらは、逆を返すように調整する必要があります。これは演習として残します。

ハッシュ。デフォルトでは、ルックアップに失敗すると が返されますnil。でデフォルト値を指定できますHash.new

h = {7: 5}
h[i] // 5 or nil

h = Hash.new(0)
h[7] = 5
h[i] // 5 or 0

配列列挙方法 - それらを学びます。ここでは、特定の値 (7) の要素がいくつ存在するかを数えるだけです。

a = [7,7,7,7,7]
a.grep {|x| x == i }.count  // 0 or 5
// or more idiomatic
a.count(i)

ブール演算子チェーン - &&andの結果||は、成功した式または「最も失敗の少ない」式です。

i == 7 && 5        // false or 5
(i == 7 && 5) || 0 // 0 or 5

スロー/キャッチおよびインライン例外スタッフィングの悪用。

catch (:"7") do
    throw i.to_s.to_sym rescue nil;
    // only here if i is not 7 or convertible to "7" AND
    // there is no matching catch further up
    return 0
end
return 5

同様に、 を使わずに除算の例を書き直す方法if。もちろん、関数ドメインが{5, 7}のみの場合、0 は決して [有効な] 入力にならないため、これも必要ありません。また、無効な入力はメソッド コントラクトの外にあります。

return (35 / i rescue 0)
于 2013-03-27T19:08:19.230 に答える
1

論理演算子とその並べ替え回路の動作を使用して、さらに 2 つの方法を提供できます。

まず、それは自分のものです:

int r(char x){
    (x == 7 && (x=5)) || ( (x == 5) && (x=7));
    return x;
}
int main(){
    printf("\n If r(5) then return = %d", r(5));
    printf("\n If r(7) then return = %d", r(7));

    printf("\n");
    return 1;
}

走る:

$ ./a.out 

 If r(5) then return = 7
 If r(7) then return = 5

第二に、数日前、私はこのトリックを見ました:

int r(char x){                      
    int l[8] = {0,0,0,0,0,7,0,5};
    return l[x];
}  

3番目:最初に使用したトリックの使用

int r(char x){
    (x > 5 && (x=5)) || (x < 7 && (x=7));
    return x;
}

第四

int r(char x){
    ((x & 2) && (x&=~2)) || ( (!(x & 2)) && (x|=2));
    return x;
}

50 : 独自の XOR

int r(int x){
    x = (x & ~2) | (~x & 2) ;
    return x;
}
于 2013-03-27T18:56:34.637 に答える