여기에 문제가 있습니다.주어진 정수의 합으로 숫자 쓰기
주어진 숫자 N을 덧셈과 뺄셈을 사용하여 합계로 씁니다. 여기
은 예입니다 :N = 20
Integers = 8, 15, 2, 9, 10
(20) = 8 + 15 - 2 + 9 - 10
여기내 생각;
첫 번째 아이디어는 +와 -를 번갈아 가며 사용하는 것이 었습니다. 먼저 마이너스 (+)와 플러스 (+)를 번갈아 사용할 수 있기 때문에 조합의 수와 그 2^k (k는 정수 중 nubmer)를 계산합니다. 그런 다음 1에서 2^k까지 모든 숫자를 처리하고 이진 형식으로 변환합니다. 그리고 어떤 1에 대해서 나는 플러스를 사용하고 0에 대해서는 마이너스를 사용합니다. 위 예제를 사용하면 예제를 통해 더 쉽게 얻을 수 있습니다.
The number of combinations is: 2^k = 2^5 = 32.
Now I run through all numbers from 1 to 32.
So i get: 1=00001, that means: -8-15-2-9+10 = -24 This is false so I go on.
2 = 00010, which means: -8-15-2+9-10 = -26. Also false.
이 방법은 정상적으로 작동하지만 정수 값이 너무 클 경우 시간이 오래 걸립니다. 이 전형적인 숙제이기 때문에, 나는 완전한 대답을하지 않을거야
#include <iostream>
#include <cmath>
using namespace std;
int convertToBinary(int number) {
int remainder;
int binNumber = 0;
int i = 1;
while(number!=0)
{
remainder=number%2;
binNumber=binNumber + (i*remainder);
number=number/2;
i=i*10;
}
return binNumber;
}
int main()
{
int N, numberOfIntegers, Combinations, Binary, Remainder, Sum;
cin >> N >> numberOfIntegers;
int Integers[numberOfIntegers];
for(int i = 0; i<numberOfIntegers; i++)
{
cin >>Integers[i];
}
Combinations = pow(2.00, numberOfIntegers);
for(int i = Combinations-1; i>=Combinations/2; i--) // I use half of the combinations, because 10100 will compute the same sum as 01011, but in with opposite sign.
{
Sum = 0;
Binary = convertToBinary(i);
for(int j = 0; Binary!=0; j++)
{
Remainder = Binary%10;
Binary = Binary/10;
if(Remainder==1)
{
Sum += Integers[numberOfIntegers-1-j];
}
else
{
Sum -= Integers[numberOfIntegers-1-j];
}
}
if(N == abs(Sum))
{
Binary = convertToBinary(i);
for(int j = 0; Binary!=0; j++)
{
Remainder = Binary%10;
Binary = Binary/10;
if(Sum>0)
{
if(Remainder==1)
{
cout << "+" << Integers[numberOfIntegers-1-j];
}
else
{
cout << "-" << Integers[numberOfIntegers-1-j];
}
}
else
{
if(Remainder==1)
{
cout << "-" << Integers[numberOfIntegers-1-j];
}
else
{
cout << "+" << Integers[numberOfIntegers-1-j];
}
}
}
break;
}
}
return 0;
}
, 기존 질문을 검색하십시오 핵심 자바를 사용하여 작성했습니다. –
http://stackoverflow.com/q/6493120/103167와 밀접하게 관련되어 있습니다. –
Ben이 말했듯이이 (또는 유사한) 여러 번 전에 물어 보았습니다. – JBentley