求这样的两个数据:5位数=24位数,9个数字互不相同。
问题分析:因为9个数字各不相同,所以首先找到各位数字不同的最小4位数:1234。找到各位数字不同的最大4位数:9876。从1234遍历到9876,每一次遍历都乘以2。取乘积在5位数且各位数字各不相同的4位数。
算法设计:最小5位数:10000。所以遍历应从5000-9876。在for语句中设定while语句。每一次i%10,只要对应下标的数组不为1,证明该数未被利用。
算法描述:
main()
{
int i;
for(i=5000;i<=9876;i++)
{
int m,n,flag=0;
int a[9]={0};
m=i;
while(m)
{
if(a[m mod 10]=0)
{
a[m mod 10]=1;
flag=1;
m=m\10;
}
else
{
flag=0;
break;
}
}
if(flag=0)
{continue;}
n=i2;
while(n)
{
if(a[n mod 10]=0)
{
a[n mod 10]=1;
flag=1;
n=n\10;
}
else
{
flag=0;
break;
}
}
if(flag=0)
{continue;}
print("%d %d\n",i,i2);
}
}
源程序:
#include<stdio.h>
int main()
{
int i;
for(i=5000;i<=9876;i++)
{
int m,n,flag=0;
int a[9]={0};
m=i;
while(m)
{
if(a[m%10]0)
{
a[m%10]=1;
flag=1;
m=m/10;
}
else
{
flag=0;
break;
}
}
if(flag0)
{continue;}
n=i2;
while(n)
{
if(a[n%10]0)
{
a[n%10]=1;
flag=1;
n=n/10;
}
else
{
flag=0;
break;
}
}
if(flag0)
{continue;}
printf("%d %d\n ",i,i*2);
}
return 0;
}
运行截图:
算法分析:时间复杂度O(1)
求这样的两个数据:5位数=2*一个4位数,9个数字互不相同。
最新推荐文章于 2023-06-03 11:36:02 发布