一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
PS:《我的滑板鞋》
有些事我都已忘记,但我现在还记得
在一个晚上我的母亲问我,今天怎么不开心
我说在我的想象中有一双滑板鞋,与众不同最时尚跳舞肯定棒
整个城市找遍所有的街都没有,她说将来会找到的时间会给我答案
星期天我再次寻找依然没有发现,一个月后我去了第二个城市
这里的人们称它为魅力之都,时间过的很快夜幕就要降临
我想我必须要离开,当我正要走时我看到了一家专卖店
那就是我要的滑板鞋,我的滑板鞋时尚时尚最时尚
回家的路上我情不自禁摩擦摩擦,在这光滑的地上摩擦
月光下我看到自己的身影,有时很远有时很近
感到一种力量驱使我的脚步,有了滑板鞋天黑都不怕
一步两步一步两步,一步一步似爪牙
似魔鬼的步伐似魔鬼的步伐,似魔鬼的步伐
摩擦摩擦摩擦摩擦,我给自己打着节拍
这是我生命中美好的时刻,我要完成我最喜欢的舞蹈
在这美丽的月光下,在这美丽的街道上
我告诉自己这是真的这不是梦,一步两步一步两步
一步一步似爪牙,似魔鬼的步伐摩擦摩擦
在这光滑的地上摩擦,摩擦似魔鬼的步伐
似魔鬼的步伐,一步两步一步两步
一步一步似爪牙,似魔鬼的步伐似魔鬼的步伐
似魔鬼的步伐摩擦摩擦,在这光滑的地上摩擦摩擦
题目分析
小宝喜欢在光滑的地板上摩擦或走路。假设他拥有N格体力。初始摩擦值为0,每次可以选择可以摩擦或者行走。摩擦消耗两格体力,第n次的摩擦值=第n-1次的摩擦值的2倍+2。行走消耗一格体力,第n次的摩擦值=第n-1次的摩擦值+1。求最大的摩擦值为多少?
输入格式:
第一行有一个正整数K。
接下来有K行,每行有一个数N。
数据保证1≤K≤100 ,0≤N≤1 000 0。摩擦值对1 000 000 007取模。
输出格式:
输出k行,第i行代表第i个数据的的结果。
输入样例:
2
1
5
输出样例:
1
10
思路分析:
这道题目其实只是分奇偶,如果是奇数的话,我们要先行走一次,然后后面全是摩擦;
如果是偶数的话,就全是摩擦,所以问题就变成了要不要行走;
然后每(行走/摩擦)一次,都要mod(1e9+7)
代码如下:
typedef long long ll;
const int mod = 1e9 + 7;
ll f;
void fun(int x);
using namespace std;
int main()
{
int k, n;
cin >> k;
for (int i = 0; i < k; i++) {
f = 0;
cin >> n;
fun(n);
}
}
void fun(int x) {
while (x)
{
//奇数
if (x % 2 != 0)
{
x--;
f++;
f %= mod;
}
//偶数
else
{
x -= 2;
f = f * 2 + 2;
f %= mod;
}
}
cout << f << endl;
}