ACdream 1069 无耻的出题人【规律】

听到X神要参加比赛,只会Fibnacci数的出题人被吓得哭晕在厕所。为了防止X神AK(ALL KILL)比赛题目,无耻的出题人只好在题面上做些手脚(加密)。其中一道题的题目描述如下:

hjxh dwh v vxxpde,mmo ijzr yfcz hg pbzrxdvgqij rid stl mc zspm vfvuu vb uwu spmwzh.

比赛的时候X神对题面研究了四个多小时,终于发现了一丝规律,并且破解出了前四个单词hjxh dwh v vxxpde对应是:give you a number。

但是比赛时间所剩不多,X神需要你的帮助(在解密题面之后帮他写一个可以ac的代码o(╯□╰)o)。

Input
输入包含多组数据。

每组数据一个数字 n, n在long long范围内。

Output
对于每组测试数据,输出答案。

Sample Input
1
2
3
4
5
-1
-2
Sample Output
1
2
3
4
5
1
2

题意:题面是通过斐波那契数进行加密过的,发现规律即可得到原意(每一个数求每一位的和)。

#include
#include
#include
#include
#include
using namespace std;
#define ll long long int
int fi[100];
void test1()
{
    fi[0] = 1ll;
    fi[1] = 1ll;
    for (int i = 2; i < 100; i++)
    {
        fi[i] = (fi[i - 1] + fi[i - 2])%26;
    }
    string str;
    getline(cin, str);
    string str2 = "give you a number";
    /*for (int i = 0; i < str2.length(); i++)
    {
        cout << -(str2[i] - str[i])<<" ";
    }*/
    int k = 0;
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] >= 'a'&&str[i] <= 'z')
        {
            str[i] -= (fi[k] % 26);
            k++;
            if (str[i] < 'a')
                str[i] += 26;
        }
    }
    cout << str << endl;
    //system("pause");
}
int main()
{
    //test1();
    int n;
    char s[25];
    while (~scanf("%s",s))
    {
        int len = strlen(s);
        int sum = 0;
        for (int i = 0; i < len; i++)
        {
            if (s[i] == '-')
                continue;
            sum += s[i] - '0';
        }
        printf("%d\n", sum);
    }
    return 0;
}

你可能感兴趣的:(Mathematics)