栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

minimum

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

minimum

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

给你一个初始的数字x(1≤x≤1e9+7),你可以进行无限次变化,你需要找到包括初始x值在内的整个变化过程中得到的最小x值

对于每一次变化,你都要完整进行如下操作:

1、对于当前x,按照其十进制形式按位相加得到sum

2、y=⌊sum/2⌋

3、z=⌈sum/2⌉

4、x=zymod(1e9+7)

mod表示取余操作,⌊p⌋表示对p进行向下取整,⌈p⌉表示对p进行向上取整,其中p为任意实数

输入描述:

第一行读入一个数Q(1≤Q≤2000000),表示组数

接下来Q行,每行一个数x(1≤x≤1e9+7),表示每次询问的初始x

输出描述:
输出Q行,每行一个数,表示每次询问对应初始x在变化过程中能找到的最小值

示例1

输入
3
1
5
10
输出
1
5
1
#include
using namespace std;
#define ll long long 
const ll int MOD=1e9+7;
ll qpow(ll a,ll b)//快速幂 
{
	ll result=1;
	while(b)
	{
		if(b&1)
			result=result*a%MOD; 
		a=(a*a)%MOD;
		b>>=1;
	}
	return result;
}
ll swqh(ll a)//计算各数位和 
{
	ll sum=0;
	while(a)
	{
		sum+=a%10;
		a/=10;
	}
	return sum;
}
ll xh(ll a)//执行循环计算 
{
	ll x,y,z;
	ll sum=swqh(a);
	y=sum/2;
	z=sum-y;
	x=qpow(z,y);
	return x;
}
int main()
{
	ll q;
	scanf("%lld",&q);
	while(q--)
	{
		ll x;
		scanf("%lld",&x);
		ll vmin=x;
		for(int i=1;i<=10;i++)//任意数据都会在在经历十次循环后开始循环 
		{
			x=xh(x);
			vmin=min(vmin,x);//取过程中最小值 
		}
		cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号