B4491 [语言月赛 202602] 数学补习 题解

· · 题解

本题来源为 2026 年 2 月语言月赛,考察了枚举和模拟。

欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。

:::align{center} :::

由于题目说「要求 x,y 均为正的 两位数」,因此我们可以直接枚举所有可能的数对 (x,y)

for(int i=10;i<=99;i++)
{
    for(int j=10;j<=99;j++)
    {
        int x=i,y=j; // 后续 x,y 的值会改变,因此在这里预先存储,避免干扰到我们外层的枚举
        //...
    }
}

接下来只需要根据题目所给的过程,依次模拟就可以了,如果最终 x=p,y=q,那么将变量 ans(初始为零)的值加一即可。

for(int c=0;c<z;c++)
{
    if((x+y)%2==1) x-=y%x;
    else y-=x%y;
    if(x<c) x+=y/2+1;
    if(y<c) y+=x/2+1;
}
if(x==p&&y==q) ans++;