【发布时间】:2018-04-18 11:34:28
【问题描述】:
我需要帮助。问题是在照镜子时找到对称数。 (例如 0、1、11、101、1521 (o) 但 1221 和 1010 不是。) enter image description here 给定两个数字 A 和 B,它们之间有空格。(输入) 范围是 0
输出是打印从 A 到 B 的对称数计数。
例如)0 100(输入) 7(输出)
这是我在 C++ 中的代码,但由于数字范围宽,此代码发生超时。这个问题怎么解决?
int main()
{
scanf("%d %d", &n,&m);
for(int i=n;i<=m;i++)
{
char s[19];
n=i;
int len=0;
do{
s[len++]=n%10;
n/=10;
} while(n>0);
len--;
int j = 0;
for(j=0;j<=len/2;j++)
{
if(s[j]==s[len-j] && (s[j]==1 || s[j]==8 || s[j]==0))
continue;
if( (s[j]==2 && s[len-j]==5) || (s[j]==5 && s[len-j]==2))
continue;
break;
}
if(j>len/2)
cnt++;
}
printf("%d\n",cnt);
return 0;
}
【问题讨论】:
-
首先:您的问题的格式确实很糟糕,以至于几乎无法阅读。请改进它。回答你的问题:我的猜测是,问题的解决方案不是不检查 A 和 B 之间的所有数字,而是只生成具有所需属性的数字 - 即,只生成不包含任何非 -可镜像的数字。