summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/Makefile2
-rw-r--r--cpp/lswf.cpp73
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;
+}