您的位置:首页 > 其它

UVa725 - Division

2015-09-07 11:15 274 查看
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 15;
int vis[maxn];

int check(int n, int x)
{
memset(vis, 0, sizeof(vis));
int a, t;
t = n / x;
if(t < 10000) vis[0] = 1;    //这步极为关键,刚开始没有这步,测试样例都过不了
//找了半天才发现。其实,如果出现前导0,一定是在
//分母,不可能出现在分子。
while(n)
{
a = n % 10;                //标记整数的每一位数字。
vis[a] = 1;
n /= 10;
}
while(t)
{
a = t % 10;
vis[a] = 1;
t /= 10;
}
for(int i = 0; i < 10; i++)
{
if(!vis[i]) return 0; // 当有一个没有标记时,直接返回0,说明不符合条件。
}
return 1;
}
int main()
{
int n, flag, kase = 0;
while(~scanf("%d", &n) && n)
{
flag = 0;
if(kase++) printf("\n");    //刚开始这行写在下面注释的地方《1》,WA了一发,表示很迷茫
//因为并没有提示PE,注意UVa的风格,这种题一定要小心,只是在
//两行中间取空行,而第一行之前和最后一行之后是没有空行的,此处
//与HDU是有点区别的。
for(int i = 10000; i <= 99999; i++)
{
int t = i % n;
//int k = i / n;
if(t == 0 && check(i, n))    //整除并且包含0 ~ 9,则输出
{
flag = 1;
printf("%05d / %05d = %d\n", i,  i/n, n); //有前导0,则用%05d的方式,左边一个可以不用。
}
}
//if(kase++) printf("\n"); 《1》
if(!flag) printf("There are no solutions for %d.\n", n); //之前没有符合条件的,则输出这一行。
//printf("\n");    //注释掉了前面跟kase有关的一行代码,WA了一发。
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: