蓝桥杯练手之 大小之差

某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。

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

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

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

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

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

srand((inttimeNULL));设定随机数种子
rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里4459-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;
 }


posted @ 2015-11-08 13:24  Joe.Smith  阅读(216)  评论(0编辑  收藏  举报