10359
和刚才那道很像,只不过递推公式变了,编为:f(n) = f(n-2)*2+f(n-1);
最坑爹的就是输入0的时候要输出的竟然是1。。。。这也算是一种way。。
//============================================================================ // Name : 10359.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <cstdio> #include <cstring> using namespace std; char sa[1000], sb[1000], sc[1000]; int n; void add(char *a, char *b){ int len1, len2, sans[1000], c; char s1[1000], s2[1000], st[1000]; len1 = strlen(a); len2 = strlen(b); if(len1 > len2){ strcpy(st, a); strcpy(a, b); strcpy(b, st); } len1 = strlen(a); len2 = strlen(b); for(int i = 0;i < len1;i++){ s1[i] = a[len1-1-i]; } s1[len1] = '\0'; for(int i = 0;i < len2;i++){ s2[i] = b[len2-1-i]; } s2[len2] = '\0'; c = 0; for(int i = 0;i < len2;i++){ if(i < len1){ sans[i] = (s1[i]-'0'+s2[i]-'0'+ c)%10; c = (s1[i]-'0'+s2[i]-'0'+ c)/10; } else{ sans[i] = (s2[i]-'0'+c)%10; c = (s2[i]-'0'+c)/10; } } if(c != 0){ len2 += 1; sans[len2-1] = c; } for(int i = 0;i < len2;i++){ sc[i] = sans[len2-1-i]+'0'; } sc[len2] = '\0'; } int main() { freopen("a.txt", "r", stdin); while(scanf("%d", &n)!=EOF){ if(n == 0){ printf("1\n"); continue; } if(n == 1){ printf("1\n"); continue; } if(n == 2){ printf("3\n"); continue; } strcpy(sa, "1"); strcpy(sb, "3"); for(int i = 3;i <= n;i++){ add(sa, sa); strcpy(sa, sc); add(sa, sb); strcpy(sa, sb); strcpy(sb, sc); } printf("%s\n", sc); } return 0; }