C++的题目如下:
然后我看到一个大佬的代码是这样的,很简洁很神奇,但是我看了很久始终没搞懂为什么。
大佬代码如下:
#include <iostream>
using namespace std;
int k,n,i=1,j=1,l=1;
long long q[1001]={0,1};
inline long long min(long long a,long long b){return a<b?a:b;}
int main(){
cin>>k>>n;
while(l<n){
long long a=q[i]*k,b=q[j]*k+1;//1 = 3^0
q[++l]=min(a,b);
if(q[l]==a)i++;
if(q[l]==b)j++;
}
cout<<q[n]<<endl;
}
有没有老师能解释一下为什么!谢谢啦
其实就是规律吧,你多列几组数据就能明白了,重要的是题目中的那个递增还是很重要的。其实多列几组的话,规律其实更加清楚了。
int res1[1001];
void fun1(int k) {
res1[1] = 1;
int a = 1;
for (int i = 2; i <= 1000;)
{
res1[i++] = res1[a] * k;
if (i <= 1000)
res1[i++] = res1[a] * k + 1;
a ++;
}
}
int main()
{
fun1(3);
return 0;
}
代码就像这样了,其实看上去更加清楚了,而不是在哪里猜测下一个数应该是啥。
就用数组存状态就好了。
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
其实应该批评代码质量,变量命名应该有意义,代码部具要整洁易读。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y