题解 P4956 【[COCI2017-2018#6] Davor】

· · 题解

UPDATE:2020.08.09 修复了一些小错误

我们先审题

"每个星期一筹集 x 元,星期二筹集 x+k 元,……,星期日筹集 x+6k 元,并在 52个星期内筹集完" --题目
所以一周有(x+x+k+x+2k+x+3k+x+4k+x+5k+x+6k=7x+21k)元

又因为52周筹集n元,所以一周筹集n/52元

联系之前的分析,我们可以推出:

7x+21k=n/52

所以 x+3k=n/364

为了更加快捷,想到用switch语句判断n/364 mod 3的结果

最后求出答案。注意输出格式和范围。(x,k 为正整数,并且满足1≤x≤100)

很轻松就AC了

上代码

#include<bits/stdc++.h>
using namespace std;
int n,k,x;//个人习惯 
int main()
{
    cin>>n;
    n/=364;//现在的n就是 x+3k 
    switch(n%3)
    {
        case 0:
            x=99;
            break;//一定要写,否则x必为98 
        case 1:
            x=100;
            break;//一定要写,否则x必为98 
        case 2:
            x=98;
            break;
    }
    for(;x>0;x-=3)//循环开始了 之前的switch起作用了  
    {
        k=(n-x)/3;
        if(k>0)
            break;//x尽可能要大 
    }
    cout<<x<<endl<<k;//两行输出 
    return 0;//养成良好习惯 
}

如有不足之处请指出。谢谢。