寒假算法题打卡:

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

题目描述

给出一个n,分别求出1-n内的所有数的因子求和的值,并依次输出。

输入描述:

一个n。

输出描述:

n个数,分别代表1-n的每个数的因子和。(1<=n<=10610^6106)
#include<stdio.h>
int main()
{
        long long int a[1000006]={0};
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            for(int j=i;j<=n;j+=i)
            {
                a[j]+=i;
            }
        }
        for(int i=1;i<=n;i++)
            printf("%lld ",a[i]);
        return 0;
}

这个题目关键在于时间复杂度。解决这个方法就是在判断每个数的因子的时候,转变一个想法,不是单独拎出一个个数来,将其因子相加得出因子和,而是数组的某个数代表着它的因子和,然后通过循环,将每个因子数加入进去。

关键算法举例理解:例如n=5,循环第一个因子1,将它加在符合的数的下面(1是所有正整数的因子),循环第二个因子2,二的累加(相当于只要是2 的倍数,那就将2这个因子加入符合的数下面),其他因子同理,这样,就能降下一些时间复杂度。

强调的是,要记得赋初值

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

题目描述

作为队伍的核心,forever97很受另外两个队友的尊敬。
Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家forever97爱吃的外卖。
如果Trote_w给forever97买了别家的外卖,forever97就会大喊“我不吃我不吃”。
但是forever97又不喜欢连续三天吃一种外卖。
如果Trote_w哪天忘了这件事并且三天给他买了同一家外卖,那么forever97就会把Trote_w的头摁进手机屏幕里。
作为Trote_w的好朋友,你能告诉他连续请forever97吃n天饭,有多少不同的购买方法吗?

输入描述:

多组样例
第一行一个整数T(1<=T<=20)代表测试样例数
接下来t行每行一个整数n,代表Trote_w要请forever97吃n天饭(1<=n<=100000)

输出描述:

输出T个整数代表方案数,由于答案太大,你只需要输出mod 1e9+7 后的答案即可。
#include<stdio.h>
const int mode=1e9+7;
int main()
{
    int t;
    scanf("%d",&t);
    int n;
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n);
        long long int a[100006];
        a[1]=3;
        a[2]=9;
        for(int j=3;j<=n;j++)
        {
            a[j]=(a[j-1]*2+a[j-2]*2)%mode;
        }
        printf("%d\n",a[n]);
    }
    return 0;
}

与上次的方块和糖果的填充一样,将其转换成斐波那契数列的方式动态规划的去算,相对不同的一点是,因为是有三家的选择,所以在第一个数的选择是三,第二个数的选择是九,后面的数字要增乘以倍数2。 (记住宏定义mode'的方法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值