请求撤下该题翻译并添上 LaTeX 数学公式。
[题目传送门](https://www.luogu.com.cn/problem/SP6803)。
题意:
让你判断一下 $0.95c\sim 1.05c$ 之间的是否有比 $c$ 小的 Absurd 值的数。
思路:
定义一个 $flag$ 用来判断 $0.95c\sim 1.05c$ 是否满足比 $c$ 的 Absurd 值的数的条件。满足则赋值为 $1$,不满足设为 $0$,之后再判断一下 $flag$ 是否为 $1$ 并且 $c$ 不为 $0$,是则输出 absurd,不是输出 not absurd。
那么如何找比 $c$ 的 Absurd 值低的数呢?据题目内容非 $0$ 位的数越少,则 Absurd 值越低;还有当 $c$ 尾数是 $5$ 时,则 Absurd 值也低。
所以,我们要去 $c$ 的后置 $0$,如果去后 $c$ 的末位是 $5$,那么就看一下 $c/20$ 是否 $\ge 5$(如果是那么它就是我们找的那个数),如果去后 $c$ 的末位 $<5$,就看一下 $c-c/20$ 是否 $\le$ $c-c\bmod5$(同上)。如果去后 $c$ 的末位大于 $5$,反之就看一下 $c+c/20$ 是否 $\ge$ $c-c\bmod5$(同上)。
这样一来不就成了考察我们分支结构吗?代码如下(比 @_maojun_的题解感觉要简单一些):
#include <iostream>
using namespace std;
long long i,n,c,j,flag;
int main(){
cin>>n;
while(n--){
cin>>c,flag=0;//清零
for(j=1;j<=9;j++){
if(c%10==0) // 他末尾是0时
{
c/=10;//去末尾0。
}
else
{
break;
}
}
if (c%10==5) //当他末尾是5时
{
if (c/20>=5) flag=1;
}
else//当末尾比5小时或比5大时
{
if (c-c/20<=c-c%5) flag=1;
if (c+c/20>=c+(5-c%5)) flag=1;
}
if (flag==1 && c!=0)
cout<<"absurd"<<endl;
else
{
cout<<"not absurd"<<endl;
}
}
}
此题需要使用 long long。