C++ 每日一练:因数-数字游&通货膨胀-x国货币&熊hz拜访


前言

突然想起了C++,很久没用过了,python真香,为了做个正经程序人,捡起来练练。就用csdn的每日一练试试。

要代码效率就用C++,要码代效率就用python。


`提示:2023年4月5号清明节的每日一练。
在这里插入图片描述

一、因数-数字游戏

描述:小Q的柠檬汁做完了。 掏出了自己的数字卡牌。 想要和别人做数字游戏。 可是她又不想要输掉游戏。 她制定好规则,每次每个人只能把这个牌换成它的因子的某个牌。 但是这个因子不能是1或者整数本身。 现在给出整数n。 两个人开始做游戏,先手在最优策略状态下能否必胜。
要说这题有多难嘛,真心不难!但是这个神一样的题目描述,用了我半天带测带蒙才看懂!
题目结论:
1、如果n是素数,输出1. 因为一张出完。
2、如果只有二个因数,输出2. 因为小Q先手。
3、如果有大于等于三个因数,输出1. 因为超过三个因数时,小Q可以组合多个因数。
输入描述:输入整数n。(1<=n<=1e13)
输出描述:先手赢输出”1”,后手赢输出”2”。
示例:
输入
6
输出
2

代码如下:

using namespace std;

int solution(long int n){
    int result;
    // TODO:
    vector<long> vec;
    long i=2;
    while (i*i <=n){
        while (n%i==0){
            vec.push_back(i);
            n/=i;
        }
        i++;  
    }
    if (n>1) vec.push_back(n);
    if (vec.size()==2) result=2;  
    else result = 1; 
return result;
}

这题用暴力法,会超时,别问我怎么知道的~

二、通货膨胀-x国货币

描述:X国发行货币最高面额为n。 次高面额为n的因子。 以此类推。 X国最多发行多少种货币。
重点思路:
从小到大除,除出的商肯定是因子。除n外,不会有大于n/2的因子。
输入描述:输入整数n。(1<=n<=1000000)表示货币的最大面额
输出描述:输出货币的种类。
示例:
输入
10
输出
3

代码如下:

int solution(int n){
    int result=1, i=1;   //result=1这个1是本身
    // TODO:
    while (n/2 >= i) {
        if (n%i==0) result++, n=n/i, i=1;    
        ++i;
    }
    return result;
}

一次搞定,暴力法。

三、熊孩子拜访

描述:已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。
输入描述:第一行输入整数n.(1<=n<=1000)。 第二行输入n个整数。(1<=num<=10000)
输出描述:输出被倒置的数列的左值,右值。 如果没有输出0 0
示例:
输入
4
1 3 2 4
输出
2 3

代码如下:

std::vector<int> solution(int n, std::vector<int>& vec){
    std::vector<int> result;
    // TODO:
    using namespace std;
    int L=0, R=0, L_flag=1;
    for (int i=0; i<n; ++i){
        if (vec[i] > vec[i+1] && i+1<n){
            R=vec[i+1];
            if (L_flag) L=vec[i], L_flag=0;
        } 
    }
    result={R,L};
    return result;
}

这题目描述得也有点问题,至少左右倒了!题目本身是很简单的,用L_flag作为开关,标注左边的起点,当检测到左边比右边小时,记住这个起始点,并将开关设为0,起始点就不会在下一次循环中改变。右边很容易处理,只要比较大小即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证的攻城狮

如本文对您有用,大爷给打个赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值