牛客网——C列一列

时间:2023-03-09 04:26:55
牛客网——C列一列

链接:https://www.nowcoder.net/acm/contest/71/C
来源:牛客网

题目描述

小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。尽管他计算非常精准,但很快他就弄混了自己的草稿纸,他找出了一些他计算的结果,但他忘记了这些都是数列中的第几项。

输入描述:

每行包括数列中的一项Ak(k<=100000)。

总行数T<=30。

输出描述:

对于每一项Ak,输出一行包括一个正整数k表示输入中数是数列的第几项。

输入例子:
2
3
5
8
13
输出例子:
2
3
4
5
6

-->

示例1

输入

2
3
5
8
13

输出

2
3
4
5
6
#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
typedef long long ll; const int inf = 0x3f3f3f3f;
const int moder = 1e9 + ;
const int MAXN=;
ull a[MAXN];
int main()
{
a[] = ;
a[] = ;
for(int i=;i < MAXN;i++) a[i] = a[i-] + a[i-];
char str[MAXN];
while(~scanf("%s",str))
{
ll len = strlen(str);
ull B = ;
for(int i=;i < len;i++) B = B* + (str[i]-''); for(int i=;i < MAXN;i++)
{
if(a[i] == B)
{
cout << i << endl;
break;
}
}
}
return ;
}

用map方便查找

#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
typedef long long ll; const int inf = 0x3f3f3f3f;
const int moder = 1e9 + ;
const int MAXN=;
ll a[MAXN];
map<ll,int> mm;
int main() {
a[] = ,a[] = ;
mm[] = ,mm[] = ;
for( int i=; i<=MAXN; i++ ) //打表
{
a[i] = a[i-] + a[i-];
mm[a[i]] = i; //用map使值和对应的位置形成键值对方便查找
}
string s;
while( cin >> s )
{
ll sum = ;
for( int i=; i<s.length(); i++ )
{
sum = sum * + s[i] - '';
}
cout << mm[sum] << endl;
}
return ;
}