[高分追加]java 五个数字中必定有两大两小两单两双,怎么最快把它们找出来?

数字范围是0-9 0-4为小 5-9为大。
例如五个数字 01689 ,
那上面的数字取两大两小两单两双的4个数字,则取出的是 0169
怎么写java算法最快从5个数字里(5个里面肯定有两个大两个小两个单两个双)找出这样的4个数字?



public class JButtonTest
{
private static boolean isRight ( String str )
{
String temp = " " + str + " ";
String reg = "[0-4]", reg1 = "[5-9]", reg2 = "[02468]+", reg3 = "[13579]+";
String s1 = str.replaceAll (reg2, ""), s2 = str.replaceAll (reg3, "");
if (
temp.split (reg).length - 1 == 2 
&& temp.split (reg1).length - 1 == 2
&& s2.length () == 2
&& s1.length () == s2.length ()
&& s1.matches (reg3)
&& s2.matches (reg2)
  )
{
return true;
}
return false;
}

public static void main ( String args[] )
{
String input = "01689";
String regex = "(\\d)(\\d)(\\d)(\\d)(\\d)";
for ( int i = 1; i < 6; i++ )
{
String reg = "";
for ( int j = 1; j < 6; j++ )
{
if (i != j)
{
reg += "$" + j;
}
}
String str = input.replaceAll (regex, reg);
if (isRight (str))
{
System.out.println (str);
}
}
}
}

追问

有种情况下程序得出的是两个结果,我只要1个。

例如 我输入数字 63289 打印的值是 :
3289
6329
我要的结果是6329,规则是如果存在6和8这2个数字均可以组合的可能,就只要最靠左边的数字。
就是6 不要8. (因为63289中6比8更靠近左边)
这样就输出的结果就是唯一的了。
就差这一步了 。 非常感谢。
解决之后 采纳并追加满分。 非常非常感谢!

追答

那你就判断每组数据里,偏大的数字里最小的那个各自比较好了,这个小问题自己解决好了,锻炼下嘛啊

追问

我写的算法运算效率不高效,影响项目性能。
麻烦高手帮我最后这一步了。 真的非常感谢了。

追答

你只判断6和8 么?

追问

6和8只是举例。
例如这个程序我输入10796 输出是
1096
1076
实质上我要是的1076 因为7比9更靠近左边.
类似这种情况. 我试了很多组数字. 发现如果打印2组数字 我要的都是第2组. 但是不确定是不是第二组的差异数字都比第一组那个差异数字更靠近左边.
我尝试了很多次不同的数字 都是要的第2组数字的情况符合我的要求. 我想应该是了.
请问能这样确定吗?

追答

那你这个例子,偏大的是96,76,
根据你的意思,你判断9和7

上个例子:89,69
你判断8和6

也就是说其中必定有一个相同的?
如果是这样的呢:
1078
1069
你要哪个呢?

追问

输入10796 输出是1096 , 1076
这2组数字差异是9和7 那就判断这2个数字中哪个在10796中是最靠近左边的, 程序最终想要的是最靠近左边的那个. 例如这组号码7比9靠近左边, 所以取1076这组数字.

同理 如果输入 91076 输出 1076 和 9106
则取 9106 这组数字.

追答

    你的这种情况就是特定2个结果的时候?

    2个结果中偏大的2个数据,有一个是相同的?

    我的那个例子,你还没有解答

追问

如果是这样的呢:
1078
1069
你要哪个呢?

程序运算不会出现这种输出结果 因为上面有6个不同的数字了.
因为我已经约定了只能输入5个数字 . 所以输出的2组4个数字只会有其中1个数字不一样. 然后这个不一样的数字 看哪个更靠左边. 就要哪组

追答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-29
每个数字有两个属性, 大小属性 和 单双属性。
全部统计,后 应该会有 大3小2, 单3双2的 统计。然后找出“大单”的数,去除就好了。
第2个回答  2014-12-29
五个数字怎么会两单两双?
相似回答