日期:2014-05-20  浏览次数:20875 次

使任意连续3个数字的和能整除3。最好用java实现
本帖最后由 longfulong 于 2014-04-28 01:38:50 编辑
给定数字2,,4,5,7,9,请对这些数字排序,使任意连续3个数字的和能整除3。最好用java实现,谢谢大家了!
最后的排序应该是5,7,9,2,4这样。
------解决方案--------------------

public class Test
{
    public static void main(String[] args)
    {
        int[] arr = {2, 4, 5, 7, 9};
        sort(arr, 0, arr.length);
    }

    public static void sort(int[] arr, int start, int end)
    {
        if (start == end)
        {
            int flag = 0;
            for (int i = 0; i < arr.length - 2; i++)
            {
                if ((arr[i] + arr[i + 1] + arr[i + 2]) % 3 == 0)
                {
                    flag++;
                }
                else
                {
                    flag--;
                }
            }
            if (flag == 3)
            {
                System.out.println("" + arr[0] + arr[1] + arr[2] + arr[3]
                        + arr[4]);
            }

        }
        else
        {
            for (int i = start; i < end; i++)
            {
                int temp = arr[start];
                arr[start] = arr[i];
                arr[i] = temp;

                sort(arr, start + 1, end);

                arr[i] = arr[start];
                arr[start] = temp;
            }
        }
    }
}

输出结果是:
24957
27954
42975
45972
54927
57924
75942
72945
感觉应该有更好的算法。第一个定了其实有用结果只能有四种情况。只需要考虑第二个,第二个确定了结果就确定了。最后三个不用考虑。楼主可以参考下这个思路写个更好的算法。