问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,b 和 n。
输出格式
输出一个整数代表天数。
样例输入
10 20 99
样例输出
8
评测用例规模与约定
对于 50% 的评测用例, 1≤a,b,n≤。
对于 100%的评测用例, 1≤a,b,n≤。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
答案解析
对于 100%的评测用例, 1≤a,b,n≤。所以变量的定义都为Long型,用Int定义范围不够,导致部分用例不通过。
思路:
定义week_sum算出一周的做题数量,定义week算出做题所需周数的整数部分,再将n变为做题week周后还需要的天数,最后用两个循环确定小于一周的天数。
Java
import java.util.Scanner;
public class text05_刷题统计 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Long a = scan.nextLong();
Long b = scan.nextLong();
Long n = scan.nextLong();
Long week_sum = a * 5 + b * 2;
Long week = n / week_sum;
n -= week * week_sum;
Long main_days = week * 7;
for (int i = 0;i < 5;i ++){
if (n>0){
n-=a;
main_days ++;
}
}
for (int i = 0;i < 2;i ++){
if (n > 0){
n-=b;
main_days++;
}
}
System.out.println(main_days);
scan.close();
}
}
C++
#include <iostream>
using namespace std;
int main() {
long long int a,b,n,i,j,k,sum,sum1=0,t;
cin>>a>>b>>n;
sum=5*a+2*b;//一周做的题
k=n/sum;//做了几周
t=n-sum*k;//做完最大整周剩的题
if(t==0) {
cout<<7*k;//如果不剩题直接输出
}
else {
for(i=1;;i++) {//寻找剩下的题几天能做完
if(i%7!=6&&i%7!=0) {
sum1+=a;
}
else {
sum1+=b;
}
if(sum1>=t) {
break;
}
}
cout<<7*k+i;
}
return 0;
}
python3
a,b,n = map(int,input().split())
week = a*5 + b*2 #计算总的做题数
days = (n//week)*7#做了几个整周的天数
n %= week #剩余的题数
if n <= 5*a: #如果剩余的题数,五天能做完
days += n//a + (0 if n % a == 0 else 1)
#天数+= 如果剩余的题数做x(n//a)天,每天做a道做完,后面的三目运算返回0天,如果还有没做完的,再加1天
else: #如果剩余的题数,五天做不完,剩余两天能做完
days += 5 #加上之前的五天
n -= 5*a #减去五天的做题数
days += n//b + (0 if n % b == 0 else 1)
#天数+= 如果剩余的题数做x(n//b)天,每天做b道做完,后面的三目运算返回0天,如果还有没做完的,再加1天
print(days)
C
#include<stdio.h>
int main()
{
long long int day=1;//表示周几天
long long int num=0;
long long int ans=0;
long int long n;
long int long a,b;
scanf("%lld %lld",&a,&b);
scanf("%lld",&n);
//注意,这里不能直接暴力的例举,会有部分超时
int long long sum=a*5+b*2;
int long long weeks=n/sum;//可以被sum整除的
num+=7*weeks;
int unfull_weeks=n%sum;//不可以被sum整除的
for(int i=unfull_weeks;i>0;)
{
if(day==7)
day=1;
if(day%7==6||day%7==0) i-=b;
else i-=a;
num++;
day++;
}
printf("%lld",num);
return 0;
}