
求C语言大神
题目标题:大小之差某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰...
题目标题: 大小之差
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:________________
请通过浏览器提交答案。
注意:只提交另一个6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。 展开
某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,并且它恰好包含了组成原6位数同样的数字。
比如:766431 - 134667 = 631764 就是具有这样特征的数字。
你还能找到另一个这样的6位数吗?
请填写它重新排列数位后得到的最大数:________________
请通过浏览器提交答案。
注意:只提交另一个6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。 展开
3个回答
展开全部
满足这样要求的数(这里只考虑排列组合后的最大值)只有三组:
第一组
max=995544
min=445599
max-min=549945
第二组
max=955554
min=455559
max-min=499995
第三组(题干已给出)
max=766431
min=134667
max-min=631764
第一组
max=995544
min=445599
max-min=549945
第二组
max=955554
min=455559
max-min=499995
第三组(题干已给出)
max=766431
min=134667
max-min=631764
追问
大神,能麻烦你写一下代码吗?
追答
没注释,不知道你看得懂不?
之前审题不清,还以为只要互相包含就行了,之前我说的第二组应该不满足要求。一个是四个5,一个是四个9。
展开全部
269631
279351
294741
296361
299961
318681
318951
335871
368181
好多啊...
写了个shell script算,效率太低
279351
294741
296361
299961
318681
318951
335871
368181
好多啊...
写了个shell script算,效率太低
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
由下面程序可直接运行出结果:
显示只有两组值:
max:766431,min:134667,result:631764
max:995544,min:445599,result:549945
//主方法调用函数
findNumber6(digital);
//方法体
/**
* 某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
*该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,
*并且它恰好包含了组成原6位数同样的数字。
* @param digital
*/
private static void findNumber6(int digital) {
// TODO Auto-generated method stub
long Min = (long) Math.pow(10, digital-1);
long Max = (long) Math.pow(10, digital);
for(long i=Min;i<Max;i++){
if(!isHas0(i)){
long min = min(i);
long max = max(i);
long result = max - min;
if(isExist(result,i)){
System.out.println("max:"+max+",min:"+min+",result:"+result);
}
}
}
}
/**
* 判断result是否和i包含数字内容相同
* @param result
* @param i
* @return
*/
private static boolean isExist(long result,long i) {
// TODO Auto-generated method stub
boolean state = true;
String str1 = String.valueOf(result);
String str2 = String.valueOf(i);
char[] tmp1 = str1.toCharArray();
char[] tmp2 = str2.toCharArray();
Arrays.sort(tmp1);
Arrays.sort(tmp2);
for(int flag=0;flag<tmp1.length;flag++){
if(!(tmp1[flag] == tmp2[flag])){
state = false;
break;
}
}
return state;
}
/**
* 返回i重组后最大值
* @param i
* @return
*/
private static long max(long flag) {
// TODO Auto-generated method stub
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
Arrays.sort(num);
StringBuffer result = new StringBuffer("");
for(int i=num.length-1;i>=0;i--){
result.append(num[i]);
}
return Long.parseLong(result.toString());
}
/**
* 返回flag重组后最小值
* @param flag
* @return
*/
private static long min(long flag) {
// TODO Auto-generated method stub
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
Arrays.sort(num);
StringBuffer result = new StringBuffer("");
for(int i=0;i<num.length;i++){
result.append(num[i]);
}
return Long.parseLong(result.toString());
}
/**
* 判断flag是否包含0
* @param flag
* @return
*/
private static boolean isHas0(long flag) {
// TODO Auto-generated method stub
boolean state = false;
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
for(int i=0;i<num.length;i++){
if('0' == num[i]){
state = true;
break;
}
}
return state;
}
显示只有两组值:
max:766431,min:134667,result:631764
max:995544,min:445599,result:549945
//主方法调用函数
findNumber6(digital);
//方法体
/**
* 某6位数,只包含1~9中的某些数字(可以重复包含同一数字,但不含数字0)。
*该数字重新排列数位后,可以得到最大数和最小数。最大最小之差也是6位数,
*并且它恰好包含了组成原6位数同样的数字。
* @param digital
*/
private static void findNumber6(int digital) {
// TODO Auto-generated method stub
long Min = (long) Math.pow(10, digital-1);
long Max = (long) Math.pow(10, digital);
for(long i=Min;i<Max;i++){
if(!isHas0(i)){
long min = min(i);
long max = max(i);
long result = max - min;
if(isExist(result,i)){
System.out.println("max:"+max+",min:"+min+",result:"+result);
}
}
}
}
/**
* 判断result是否和i包含数字内容相同
* @param result
* @param i
* @return
*/
private static boolean isExist(long result,long i) {
// TODO Auto-generated method stub
boolean state = true;
String str1 = String.valueOf(result);
String str2 = String.valueOf(i);
char[] tmp1 = str1.toCharArray();
char[] tmp2 = str2.toCharArray();
Arrays.sort(tmp1);
Arrays.sort(tmp2);
for(int flag=0;flag<tmp1.length;flag++){
if(!(tmp1[flag] == tmp2[flag])){
state = false;
break;
}
}
return state;
}
/**
* 返回i重组后最大值
* @param i
* @return
*/
private static long max(long flag) {
// TODO Auto-generated method stub
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
Arrays.sort(num);
StringBuffer result = new StringBuffer("");
for(int i=num.length-1;i>=0;i--){
result.append(num[i]);
}
return Long.parseLong(result.toString());
}
/**
* 返回flag重组后最小值
* @param flag
* @return
*/
private static long min(long flag) {
// TODO Auto-generated method stub
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
Arrays.sort(num);
StringBuffer result = new StringBuffer("");
for(int i=0;i<num.length;i++){
result.append(num[i]);
}
return Long.parseLong(result.toString());
}
/**
* 判断flag是否包含0
* @param flag
* @return
*/
private static boolean isHas0(long flag) {
// TODO Auto-generated method stub
boolean state = false;
String tmp = String.valueOf(flag);
char[] num = tmp.toCharArray();
for(int i=0;i<num.length;i++){
if('0' == num[i]){
state = true;
break;
}
}
return state;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询