2014-03-12 4 views
1

숫자 X를 얻는 함수를 작성하고 X = 5이면 7을 반환하고, X가 7이면 5를 반환하고, 다른 것을 돌려 보내라. "if"블록을 사용하는 간단한 방법이 있습니다. 다른 방법 - 맵핑 된 5 개 (5에 매핑 된 7, 7에 매핑) 세 번째 방법 - 일치하는 선형 수학 방정식을 작성하는 중 그러나 찾고있는 것이 있습니다. 그것을하는 네 번째 방법 (다시 - "if"블록을 사용하지 않고).C 코드 - "if"없이 5에서 7로 7에서 5로 변환하는 방법

비트 작동을 사용해야하는 것처럼 느껴지지만이 영역에서는 지배적이지 않아 도움이 필요합니다.

아이디어가 있으십니까?

감사합니다. 나는 희망

+1

를 인덱스로 입력을 사용 (예 : 전혀 분기 형태가 아님)? – keltar

+0

예. 아니, 스위치가없는 경우. – ClimbingLung

답변

3

이 내가 당신을 위해 할 숙제입니다 :

int mysteriousFunction(int x) { 
    return (x^2); 
} 
+0

괜찮습니다. 이것은 숙제가 아니라 한 가지 문제에 대해 다른 해결책을 제시하고 다른 방식으로 생각하는 것입니다. – ClimbingLung

5

명백한 비트 XOR 솔루션으로, 당신은 또한 부울 식 1 또는 0, 예를 들어, 반환한다는 사실을 악용 할 수 있습니다뿐만 아니라 예컨대

int f(int x) 
{ 
    return (x == 5) * 7 + (x == 7) * 5; 
} 

다른 단순한 연산 방법이있다, 입력 범위는 경계 작은 경우

int f(int x) 
{ 
    return 12 - x; 
} 
+1

첫 번째 것은 여전히 ​​일부입니다. 종류의 "if"그러나 나는 12-X를 정말로 좋아한다. 간단하고 깨끗하며 간단합니다. 나는 그것에 대해 신경써 줘야한다. =) – ClimbingLung

+0

첫 번째 것은 실제로 일반적으로 무결점이다. 컴파일을 시도하고 생성 된 코드를 살펴보기 바란다. –

0

, 당신은`if`,`switch` 및 alltogether 삼항 연산자를 의미 if``으로 ... 결과의 조회 테이블에