c++算法练习day01【2022年蓝桥杯省赛B组题目】每天做一点、、、

这个练习目前来说就比较宽松,打算在寒假(基本也就是这一个月每天刷几道题吧)

题目一:

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

答案:

#include <iostream>
using namespace std;
typedef long long ll;
ll a,b,n,add,day;
int main()
{
  cin>>a>>b>>n;
  int tem=5*a+2*b;//计算一周要刷多少道题
  ll week=n/tem;//计算要刷多少周
  ll last=n%tem;//还剩多少道题
  day+=week*7;//表示整周的天数
  int x=1;
  while(last>0)//剩下的题目为零停止(为了解决剩下的题目的问题)
  {
    if(x%7==6||x%7==0) last-=b;
    else last-=a;
    day++;
    x++;
  }
  cout<<day<<endl;
  return 0;
}

题解:

 

 由上图可知,数据类型应为long long型

其次由于本题n的数据范围很大,直接写while循环会超时,所以得先计算一下需要几周,再计算还需要几天。

 作者有话说:

long long只能用于储存整数    but long long 的储存范围要比int 大

众所周知 int 整形类型的变量可以储存的范围是 -2³²+1 ~ 2³²-1 (-2^32+1~2^32-1)

但是 long long 类型可以储存的就比int 类型可以储存的大得多。long long类型的变量可以储存的范围是-2⁶⁴+1~2⁶⁴-1(-2^64+1~2^64-1)

为了验证大家可以试试运行下面这个代码

#include<bits/stdc++.h>//老生常谈的“万能”工具箱
using namespace std;
typedef long long ll;//可以在代码中用ll来代替繁琐的long long
int main(){
    int i=4294967295;
    ll a=18446744073709551615;
    cout<<i<<" "<<a;
    i++;
    a++;
    cout<<i<<" "<<a;
    return 0;
}
//自己编译一下运行 你会发现输出来的结果并不是正常的加一的结果
//而是一个负数 上面我所定义的和输出的那个负数就是
//这两种变量能够储存的极端值了

 

posted @ 2023-01-05 19:03  喝着农药吐泡泡o  阅读(120)  评论(0编辑  收藏  举报