标签:复数 排列 sub lse while 重复数 return 一个 判断
一个正整数n(2<=n<=78) ,按照从小到大的顺序输出所有形如 abcde/fghij=n的表达式。
其中aj恰好为数字09的一个全排列(可以有前导0)。
这里我的形式并非是五位数除以五位数或者五位数除以四位数,只是满足数字用完的条件,所以代码还需要判断能否是六位数。
int if_repeated(int n)//判断数字本身有重复数字
{
int a[10]={0};
for(int i=0;n>0;i++)
{
a[n%10]++;
n/=10;
}
for(int i=0;i<10;i++)
{
if(a[i]>1) return 1;
}
return 0;
}
//是否有前导0,所以要检查0应该出现在何处
int five_four(int x,int y)//x是五位数,y是四位数
{
int b[10]={0};//标记数组,可以能判断数字是否出现
for(int i=0;x>0;i++){
b[x%10]++;
x/=10;
}
for(int i=0;y>0;i++){
b[y%10]++;
y/=10;
}
if(b[0]>0) return 0;
for(int i=1;i<10;i++)
{
if(b[i]>1) return 0;
}
return 1;
}
int six_four(int x,int y)//x是五位数,y是四位数
{
int b[10]={0};
for(int i=0;x>0;i++){
b[x%10]++;
x/=10;
}
for(int i=0;y>0;i++){
b[y%10]++;
y/=10;
}
for(int i=0;i<10;i++)
{
if(b[i]>1) return 0;
}
return 1;
}
int main()
{
int n;
while((scanf("%d",&n))!=EOF)
{
int x,y;
if(n>10)
{
for(int i=1000;i<9999;i++)
{
y=i;
if(if_repeated(y))
{
continue;
}
x=y*n;
if(if_repeated(x))
{
continue;
}
if(x<100000)
{
if(five_four(x,y)) printf("%d %d\n",x,y);
}
else
{
if(six_four(x,y)) printf("%d %d\n",x,y);
}
}
}
else
{
for(int i=1000;i<99999;i++)
{
y=i;
if(if_repeated(y))
{
continue;
}
x=y*n;
if(x<10000) {
continue;
}
if(if_repeated(x))
{
continue;
}
if(y<10000)
{
if(five_four(x,y)) printf("%d %d\n",x,y);
}
else
{
if(six_four(x,y)) printf("%d %d\n",x,y);
}
}
}
}
}
标签:复数 排列 sub lse while 重复数 return 一个 判断
原文地址:https://www.cnblogs.com/tzp-empty-hya/p/14157700.html