11.22学习笔记

第一次阶段性机试的反思:

约瑟夫环暴露的问题:

1.对平时作业题目的重视程度不够,总想着做完却没有学习他人的思维,没有认真想清楚正确的逻辑。

2.考试时紧张,脑子不清晰,逻辑混乱。与其在那乱七八糟添加代码,还不如先暂时沉下心来好好想想代码实现的过程是什么样的。多思考,而不是盲目上机敲。

#include <stdio.h>
int n,k,alive[501],pos;//这种方法用了取反,也就是我们假定死亡为1,生存为0.同时,直接做的最重要思路就是:只要加了pos,我就一定要去检查是否溢出(因为没有除法限制)
int main(){
    pos=0;//为什么取0?因为可以想象是第0个人被杀后从第一个才开始报数,这与后面的逻辑一致。
    scanf("%d %d",&n,&k);
    for(int i=1;i<n;i++){//杀n-1个人
        for(int j=1;j<=k;j++){
            pos++;
            if(pos>n)pos=1;//只要位置变动,变一个立马判断
            while(alive[pos]){
                pos++;
                if(pos>n)pos=1;//同上
            }
        }
        alive[pos]=1;
    }
    for(int i=1;i<=n;i++){
        if(!alive[pos])printf("%d",pos);
    }
    return 0;
}

三只小猪暴露的问题:

1.对异或运算如何实现没有在纸上想清楚,还是一样,没有思考好就不要上机敲!哪怕用其他方法实现也不要用脑子还是一团浆糊的东西。

2.没有注意到数据的大小,及时采取适合的实现方式。本题数据范围很小,所以可以直接逐一点进行分析。

LC264丑数:

用构造的方法,从1开始往后构造丑数。(每一个数的最大质因子。例如:4的最大质因子是2,那就可以乘以2 3 5 避免重复)

采用一个小顶堆,去维护整个堆最小值。

class Solution {
public:

 int nthUglyNumber(int n) {
  set<long long>s;
s.insert(1);
for(int i=1;i<n;i++){
long long a=*s.begin();
s.erase(s.begin());
s.insert(2*a);
s.insert(3*a);
s.insert(5*a);
}
return *s.begin();
    }
};

评价一下:为什么可以直接做,不用管生成重复的数据呢?因为set元素会自动帮你去重。当然,老师的方法也值得学习,特别是对switch的巧妙运用:

HZ284超市卖货:

1.将所有商品按照过期日期d从小到大牌序。

2.维护一个最优方案的集合。 将当前商品的过期日期d和集合中元素的数量n比较。如果过期日期d>n,就直接加入。如果d=n,我们就将利润p与集合中最小利润进行比较,以利润作 为是否插入的依据。d不可能小于n。因为已经对商品排序了。

//todo:本题要使用到运算符重载,超纲,先暂时跳过。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值