From Hero to Zero
2024-09-06 03:28:32
题目描述:
有一天,小明给了你两个数字n和k,现在,你需要对数字n进行一下操作:
对于每一步操作,你可以选择下面其中一个项目:
1.将n的值减少1.
2.如果n能被k整除,可以使n/k
比如:n=27,k=3,你可以进行下列操作:27→26→25→24→8→7→6→2→1→0
请你计算出数字n变为0时最少需要的操作数。
输入:
第一行输入一个整数t(1≤t≤100),表示数据个数
接下来n行,每行2个整数n和k(1≤n≤1e18,2≤k≤1e18)
输出:
将数字n变为0的最小次数
输入样例:
3-;2
输出样例:
8
19
样例说明:
对于第一组数据,有:59→58→57→19→18→6→2→1→0
对于第二组数据,可以连续除以18个10使n变为1。
题目分析
首先可以先想到一个暴力的做法,也就是照着题目做
#include<cstdio>
int t;
long long n;
long long k;
int main(){
scanf("%d",&t);
while(t--)
{
long long ans=0;
scanf("%lld %lld",&n,&k);
while(n!=0)
{
if(n%k==0)
{
n/=k;
ans++;
}
else
{
ans++;
n--;
}
}
printf("%lld\n",ans);
}
return 0;
}
不出所料,果然,超时了
然后,寻找优化时,发现,也就只能优化–1的部分,也就是用%,把n削成能够被/k的地步
#include<cstdio>
int t;
long long n;
long long k;
int main(){
scanf("%d",&t);
while(t--)
{
long long ans=0;
scanf("%lld %lld",&n,&k);
while(n!=0)
{
if(n%k==0)
{
n/=k;
ans++;
}
else
{
ans+=n%k;
n-=n%k;
}
}
printf("%lld\n",ans);
}
return 0;
}
最新文章
- Rafy 框架 - 幽灵插件(假删除)
- 过段时间逐步使用HTML5新增的web worker等内容
- iOS蓝牙开发CoreBluetooth快速入门
- GFW-新闭关锁国政策
- 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
- sql附加数据库错误5120
- css015 定位网页上的元素
- js函数的几个特殊点
- WPF开发时光之痕日记本(一)——富文本编辑器
- 网络流量监控shell脚本
- 【BZOJ】【2463】【中山市选2009】谁能赢呢?
- Cognos请求流程——<;转>;
- 云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯
- spin.js无图片实现loading进度条,支持但非依赖jquery
- poj_3122:Pie(二分)
- 学习笔记:webpack深入与实践(一)
- Scala中 object 和 class的区别
- Linux编程 11(shell全局环境变量与局变环境变量)
- jQuery之动画
- Highcharts之折线图
热门文章
- 南京邮电大学CTF密码学之MD5-golang与php代码实现
- R数据分析:变量间的非线性关系,多项式,样条回归和可加模型
- 30个类手写Spring核心原理之依赖注入功能(3)
- 关于后端 Entity Model Domain 的分界线
- Asp.Net Core基础篇之:白话管道中间件
- AcWing3544. 寻找变化前的01序列
- ACwing1015. 摘花生
- 页面图片懒加载、延迟加载(lazyload)
- 【LeetCode】26. Remove Duplicates from Sorted Array 解题报告(Python&C++&Java)
- 【九度OJ】题目1185:特殊排序 解题报告