基本算法练习三

第一题:装载乘客


这道题就是需要设置一个变量用来存每次上车人数的和,如果超过了车的容量,就需要增加一辆车,然后将这个值设置为此时这个班的人数。具体如下代码:

#include <iostream>

using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    int a[n];
    int carSum = 1;
    int temp = 0;  //可表示此时一辆车上要坐多少人

    for(int i=0;i<n;i++){
        cin>>a[i];
        temp += a[i];
        if(temp>m)
        {
            carSum++;
            temp = a[i];
        }
    }

    cout<<carSum<<endl;
    return 0;

}

第二题:股神


唉,这道题写出了前面几项,能看出一点规律,但自己的思维老是转不过弯,理解不了。后面看了看后面的答案参考,才明白了些。。

我们先列出前面的几项:

天数:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11….
钱数:1, 2, 1, 2, 3, 2, 3, 4, 5, 4, 5….

如果从跌的那天分隔开这些数据,我们可以看到:

天数:1, 2 | 3, 4, 5 | 6, 7, 8, 9 | 10, 11….
钱数:1, 2 | 1, 2, 3 | 2, 3, 4, 5 | 4, 5 ….
相差:0 ,0 | 2, 2, 2 | 4, 4, 4, 4 | 6, 6 ….

这样就可以看到,每下跌一次,后面的天数和钱数的差值加了2。设下跌次数为i,差值就是2i。

接下来如果能判断出i来,每日的钱数就可以求得了。

如何根据输入的天数n来得到i是多少。再观察一下序列,发现分隔的子序列后一个总比前一个多一个数,设每组子序列个数为m,则i=0时,m=2;i=1时,m=3.
这时,我们输入天数n,如输入5,需判断它是第几组里的。先判断是否在第一组,5-2=3>0不是在第一组,然后m++,因为到第二组有3个数了,3-3=0,所以在第二组中,因此最后的钱数就为:天数-差值2i=5-2*1=3.
写出代码如下:

#include <iostream>

using namespace std;

int getMoney(int n){
    int i=0;  //设置下跌的次数,也可以理解为第几组。
    int m=2;  //m为每组中的个数,第0组中有两个数。

    int tmp = n;
    while (tmp - m > 0) {
        i++;   //跳到下一组
        tmp = tmp - m;
        m++;   //下一组个数也要跟着增加
    }
    return n - 2*i;
}

int main(){
    int n;
    while (cin>>n) {
        cout<<getMoney(n)<<endl;
    }
    return 0;
}

想想自己还真弱,怎么增强啊。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值