算法1:除法和取余-循环(暴力枚举) $O()$
//while循环模拟剩下的题目数
#include<bits/stdc++.h>
using namespace std;
int main() {
long long a, b, n, res = 0, s;
cin >> a >> b >> n;
s = 5*a + 2*b; //算出一周的刷题数
res = n / s * 7; //直接计算出整周需要多少周 * 7 就是总天数
n %= s;
int i = 1;
while (n > 0) {
if (i <= 5) n -= a;
else n -= b;
res++;
i++;
}
cout << res;
return 0;
}
算法2:数组存储一周的题目数() $O(n)$
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a, b, n, s, res = 0;
cin >> a >> b >> n;
s = (5*a + 2*b);
res = n/s * 7;
n %= s;
long long t[] = {a, a, a, a, a, b, b};
for (int i = 0; n > 0; ++ i) {
res ++;
n -= t[i];
}
cout << res;
return 0;
}
算法3:余下不足整周的,通过分类讨论计算() $O(1)$
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a, b, n, s, res = 0;
cin >> a >> b >> n;
s = (5*a + 2*b);
res = n/s * 7;
n %= s;
if (n >= 5*a) { //超过5天的题量
res += 5; //加5天
n -= 5*a; //减去 最后在加上b的个数,向上取整
// res += (n%b ? n/b+1 : n/b);
res += (n+b-1) / b;
} else {
// res += (n%a ? n/a+1 : n/a);
res += (n+a-1) / a;
}
cout << res;
return 0;
}