您的位置:首页 > 其它

蓝桥杯练手之 大小之差

2015-11-08 13:24 162 查看
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。

    该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。

    比如:766431 - 134667 = 631764 就是具有这样特征的数字。

    你还能找到另一个这样的6位数吗?

请填写它重新排列数位后得到的最大数:________________  

我在这里做一下补充说明:

srand((int)time(NULL));设定随机数种子
rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
for(int i=0;i<10;i++)
printf("%3d",rand()%100+1);
printf("\n");
return 0;
}
//生成10个1-100的随机整数。

切回正题
直接上代码!

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define max 5
int sort(int d[])
{//排序函数
int i,j,k;
for (i=0;i<max;i++)
for (j=0;j<max-i;j++)
{
if (d[j]<d[j+1])
{
k=d[j+1];
d[j+1]=d[j];
d[j]=k;
}
}
return 0;
}
int main()
{

srand(time(0));
int flag,i,j,k,a[6],b[6],c[6];
int w,m,n;
flag=1;
while(flag){
m=n=0;
for(i=0;i<=max;i++)
a[i]=rand()%9+1;
sort(a);

for(i=0;i<=max;i++)
{
b[i]=a[5-i];
}
for(i=0;i<=max;i++)
{
m=m*10+a[i];
}

for(i=0;i<=max;i++)
{
n=n*10+b[i];
}

k=m-n;

for(i=0;i<=max;i++)
{
c[i]=k%10;
k=k/10;
}
sort(c);
w=0;
for(i=0;i<=max;i++)
{
if(a[i]==c[i])
{
w++;
if(w==6)
flag=0;
}
}
if(!flag)
printf("%d",m);
}

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