summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorSanto Cariotti <sancn@live.com>2017-05-27 15:39:05 +0200
committerSanto Cariotti <sancn@live.com>2017-05-27 15:39:05 +0200
commitb880ad05d37cf36ec1edddc944f558420bc8a07e (patch)
tree5a1ddfb5b420f23ecb32a9cf9e6d17582ee084c5 /cpp
parent09422247fe86c55961ffd53587fe0ea8772e452c (diff)
fixed it
Diffstat (limited to 'cpp')
-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;
+}