C语言之签到

欢迎进入我的C语言世界

题目

Problem Description

2019福大校赛现场,GYY组织大家进行签到。轮到HHD签到的时候,他发现他前面的每一个人的名字后面都跟着一个数字。他敏锐的发现,每个人名字后面的数字的规律是这样的:

  1. 如果前一个人的数字是奇数,那么当前的数字就是前一个数字的2倍。

  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;
}

本题感悟

本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~

本题按着题目的顺序来写。

猜你喜欢

转载自blog.csdn.net/hongguoya/article/details/105553610