大小之差 (2013年11月24日 蓝桥杯校内选拔赛c\c++B组)

题目标题: 大小之差

 

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

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

 

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

   

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

   

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

 

 

请通过浏览器提交答案。

注意:只提交另一个6位数,题中已经给出的这个不要提交。

注意:不要书写其它的内容(比如:说明性的文字)。

  

#include "iostream.h"
#include <stdlib.h>
#include <ctime>
int comper(const void *a, const void *b)
{
	return *(int *)a - *(int *)b;
}//comper 从小到大排
void shuzu(int m, int &max, int &min)
{ 
	int k = 0;
	int a[6] = {0};
	for(k = 0; k < 6; k++) {
			a[k] = m%10;
			m = m/10;
			if(a[k] == 0)	break; // 进入i+1
		}//for 将数字变成数组
		qsort(a, 6, sizeof(int), comper); //排序
		int p = 1;
		for( k = 0; k < 6; k++) {
			max += a[k]*p; 
			min += a[5-k]*p;
			p *= 10;
		}//for 将数组变为数字

}//shuzu
int main()
{
	clock_t start, finish;
	double totaltime;
	start = clock();

	int max = 0, min = 0, m = 0, flag = 100, j = 0;
	int s[1000] = {0};
	for(int i = 111111; i <= 999999; i++) {
		max = 0; min = 0;
		shuzu(i, max, min);
		if(max%10 == 0)
			continue;
		m = max - min;
		int max1=0,min1=0;
		shuzu(m, max1, min1);
		if(min1 == min){

			s[j++] = max;
			for(int k = 0; k < j-1; k++){
				if(s[j-1] == s[k]) { // 《 j-1 去掉自己
					s[j-1] = 0;
					j--;
				}
			}//for
			//cout << max << endl;
		}//if
	}//for
	
	for(int k = 0; k < j; k++){
		cout << s[k] <<endl;
	}//for

	finish = clock();
	totaltime = (double)(finish-start);
	cout<<totaltime<<endl;
	return 0;
}//main


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值