洛谷 P4956 [COCI2017-2018#6] Davor
星期一筹钱
x
x
x,星期二筹钱
x
+
k
x+k
x+k,…,星期日筹钱
x
+
6
k
x+6k
x+6k。那么一星期筹钱:
∑
i
=
0
6
(
x
+
i
⋅
k
)
=
7
x
+
21
k
\sum_{i=0}^6(x+i\cdot k)=7x+21 k
∑i=06(x+i⋅k)=7x+21k,52个星期筹钱:
52
(
7
x
+
21
k
)
=
364
(
x
+
3
k
)
52(7x+21k)=364(x+3k)
52(7x+21k)=364(x+3k)。
(不用判断n能否整除364。如果n不能整除364,就无解了。)
题目要求: x 尽可能大,k 尽可能小。
因此x从大到小遍历,找到第一个满足条件的x,根据x求出k,输出x与k,结束程序。
题目要求: x 尽可能大,k 尽可能小。
因此x从大到小遍历,k
从小到大遍历,找到第一个满足条件的x、k就输出,而后结束程序。
#include
using namespace std;
int main()
{
int n;
cin >> n;
for(int x = 100; x >= 1; --x)
{
if((n/364-x)%3 == 0 && (n/364-x)/3 > 0)
{
cout << x << endl << (n/364-x)/3;
return 0;
}
}
return 0;
}
#include
using namespace std;
int main()
{
int n;
cin >> n;
for(int x = 100; x >= 1; --x)
for(int k = 1; 364*(x+3*k) <= n; ++k)
if(364*(x+3*k) == n)
{
cout << x << endl << k;
return 0;
}
return 0;
}