签到
欢迎进入我的C语言世界
题目
Problem Description
2019福大校赛现场,GYY组织大家进行签到。轮到HHD签到的时候,他发现他前面的每一个人的名字后面都跟着一个数字。他敏锐的发现,每个人名字后面的数字的规律是这样的:
-
如果前一个人的数字是奇数,那么当前的数字就是前一个数字的2倍。
-
如果前一个人的数字是偶数,那么当前的数字就是前一个数字减去1。
此外,如果这个数字超过了100000007,那么这个数字要减去100000007。HHD发现了规律以后就懒得看前一个人的数字是多少了,他知道他是第K位签到者,第一个签到的人写下的数字是N,请求出HHD应该写下的数字是多少。
Input
多组测试数据。
输入第一行为两个正整数N和K,表示HHD是第K个签到的,第一个人写下的数字为N。
1≤N≤100000007,1≤K≤10000。
Output
输出1个正整数,表示HHD应该写下的编号。
Sample Input
1 2
Sample Output
2
答案
下面展示 实现代码
。
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int N,K;
int i;
int a[10000];
while(scanf("%d %d",&N,&K) != EOF)
{
a[0] = N;
for(i = 1; i < K; i ++)
{
if(a[i-1] % 2 == 1)
{
a[i] = a[i-1] * 2;
}
else if(a[i-1] % 2 == 0)
{
a[i] = a[i-1] - 1;
}
if(a[i] > 100000007)
{
a[i] = a[i] - 100000007;
}
}
cout << a[K-1] << endl;
}
return 0;
}
本题感悟
本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~
本题按着题目的顺序来写。