1 条题解
-
0
自动搬运
来自洛谷,原作者为

yummy
这个人是时代的眼泪,什么也没有留下搬运于
2025-08-24 23:03:15,当前版本为作者最后更新于2024-08-25 18:55:35,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Z. 37 官方题解
本题考察的主要知识点:
- 【2】分支语句
- 【2】循环语句(模拟法)
- 【3】简单数论(数学法)
模拟法
计算出 ,然后判断 ( 表示赋值)是否所有数位都相等。
思考一下怎么判断一个数个位和十位都相等——只要先取末两位 ,再判断其是否为 的倍数。如果是(也就是
a%100%11==0),那么个位和十位就相等。接下来判断十位和百位是否相等,百位和千位,以此类推。这个实现可以通过每次除以 ,直到变成一位数为止。具体可以参考代码。
#include<bits/stdc++.h> using namespace std; int a; int main(){ cin>>a; a*=37; bool res=true; while(a>=10){ if(a%100 % 11) res=false; a/=10; } if(res)cout<<"Yes"; else cout<<"No"; return 0; }数学法
如果 是三位数,那么 必须是 的倍数,也就是 为 的倍数。
如果 是四位数或五位数(以 为例),则 是 的倍数,也就是 是 的倍数,而这是不可能的。五位数同理。
因此 只可能是 或三位数或六位数。在 是六位数的前提下,不难发现 ,而 ,故在数据范围限制下, 只能是 。
总而言之, 要么小于等于 且为 的倍数,要么是 。
#include<bits/stdc++.h> using namespace std; int a; int main(){ cin>>a; if(a<=27 and a%3==0 or a==3003) cout<<"Yes"; else cout<<"No"; return 0; }
- 1
信息
- ID
- 10662
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者