diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/Makefile | 2 | ||||
-rw-r--r-- | cpp/lswf.cpp | 73 |
2 files changed, 75 insertions, 0 deletions
diff --git a/cpp/Makefile b/cpp/Makefile new file mode 100644 index 0000000..147432b --- /dev/null +++ b/cpp/Makefile @@ -0,0 +1,2 @@ +all: + g++-4.8 -Wall -std=c++11 -o $1 $1.cpp diff --git a/cpp/lswf.cpp b/cpp/lswf.cpp new file mode 100644 index 0000000..dcf1b13 --- /dev/null +++ b/cpp/lswf.cpp @@ -0,0 +1,73 @@ +/* INPUT: + * 19 + * + * OUTPUT: + * 1000101 + */ +#include <iostream> +#include <fstream> +#include <list> +#define MAXG 1000001 + +int fibonacci(int* fib, int N) +{ + fib[0] = 1; fib[1] = 1; + int lst; + + for(int i = 2; i < N; i++) { + fib[i] = fib[i-1] + fib[i-2]; + lst = i; + if(fib[i] > N) break; + } + + return lst; +} + +int main() +{ + std::ifstream in("input.txt"); + std::ofstream out("output.txt"); + std::list<int> seq; + std::list<int>::iterator j; + + int N, i; + in >> N; + int caracts[MAXG], somma = 0, potSomma; + int lastc; + + if(N > 4) + lastc = fibonacci(caracts, N); + else { + caracts[0] = 1; + for(i = 1; i < 4; i++) + caracts[i] = i; + + switch (N) { + case 1: + lastc = 1; + break; + case 2: + lastc = 2; + break; + case 3: + lastc = 3; + break; + default: + lastc = 4; + } + } + + for(i = lastc; i > 0; i--) { + potSomma = somma + caracts[i]; + if(potSomma < N) { + somma = potSomma; + seq.push_front(1); + } else seq.push_front(0); + } + seq.push_front(1); + for(j = seq.begin(); j != seq.end(); j++) out << *j; + + in.close(); + out.close(); + return 0; +} |