兔兔小小淘气 2021-05-09 10:47 采纳率: 66.7%
浏览 50
已采纳

神奇的数组和神奇的算法

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;

}

有没有老师能解释一下为什么!谢谢啦

  • 写回答

6条回答 默认 最新

  • CSDN专家-三岁丫 2021-05-09 13:16
    关注

    其实就是规律吧,你多列几组数据就能明白了,重要的是题目中的那个递增还是很重要的。其实多列几组的话,规律其实更加清楚了。

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

    代码就像这样了,其实看上去更加清楚了,而不是在哪里猜测下一个数应该是啥。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表