解题思路:

先用ans表示有多少周,n/(5*a+b*2)

工作日有二天,周末有二天

sum表示天数

用n-(5*a+2*b)*ans=剩余的天数

剩余的天数一定会落在工作日,或者周末这两种情况;

再用(n-(5*a+2*b)*ans)/a表示能在工作日完成的a题,

如果(n-(5*a+2*b)*ans)%a 不等于0,说明有剩余,还要加一天

在周末这种情况也同理;




注意事项:对于 100% 的评测用例,1 ≤ a, b, n ≤ 1018,要用long long
参考代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b,n;
    long long ans=0,sum=0;
    scanf("%lld%lld%lld",&a,&b,&n);
    ans+=n/(5*a+b*2);
    sum=ans*7;
    if((n-(a*5+b*2)*ans)<=5*a)
    {
        sum+=(n-(5*a+2*b)*ans)/a;
        if((n-(5*a+2*b)*ans)%a!=0)
        {
            sum++;
        }
    }
    else
    {
        sum+=5;
        sum+=((n-(5*a+2*b)*ans)-5*a)/b;
        if(((n-(5*a+2*b)*ans)-5*a)%b!=0)
        {
            sum++;
        }
    }
    printf("%lld",sum);
}


点赞(0)
 

0.0分

19 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

shuoes 1年前 回复TA
#include <stdio.h>
int  zhen(long long n,long long m)
{
	long int p = n / m;
	if (n % m != 0)
	{

		return p + 1;
	}
	else
		return p;
}
int main() {
	long long int day, a,b, n;
	scanf("%d %d %d", &a, &b, &n);
	long int week = n / (5 * a + b * 2);//几周
	day= 7 * week;//多少天
	n= n - week * (5 * a + b * 2);//剩余题数
	if (n <= 5 * a)
	{
		day = day + zhen(n , a);
	}
	else
	{
		day = day + 5 + zhen(n - 5 * a, b);
	}
	printf("%lld", day);
	return 0;
}
为什么只有80分 求大佬指点
ylwh 1年前 回复TA
分享以下
```
#include<bits/stdc++.h>
using namespace std;
int main(){
	long w,a,b,n,count=0;
	cin>>a>>b>>n;
	w=n/(5*a+2*b);
	n=n-w*(5*a+2*b);
	while(n>0){
		count++;
		if(count<=5){
			n=n-a;
		}else{
			n=n-b;
		}
	}
	count=7*w+count;
	cout<<count;
	return 0;
}
mtrix 2年前 回复TA
非常感谢