j_0048.gif所谓"6174"工程,就是一个四位数,对数字的要求是它的个十百千位上的数字不能完全一样,经过以下n次算数变换总能得到“6174”这样一个结果。记得第一次写的时候真的是花了好大的功夫,经过一些日子的学习,已经好多了,好多当时纠结了很久的问题,今天都以不是问题了!

变化步骤:

⑴将上述的一个四位数进行拆分,分别得到四个数字;

⑵将⑴中的四个数字先组合成一个最大的四位数;

⑶再将⑴中的四个数字组合成一个最小的四位数;

⑷用大的四位数与小的四位数作差,观察结果;

⑸如果⑷中的结果不是“6174”,则继续执行⑴直到出现“6174”

   在C#中我们把这样一个程序执行的过程叫做循环体。把这个用    C#语言建立的项目叫做“6174”项目。

下面给出了编程代码:

namespace prj6174version2
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义变量count计算循环的次数
            int count = 0;
            //定义变量并初始化为要判断的数字
            int num = 1333;
            if (num%1111!=0)
            {
                while (true)
                {
                    int[] ary = new int[4];
                    int index = 0;
                    //拆分数字并将拆分的结果放入长度为4的数组中
                    while (num > 0)
                    {
                        //取余的结果是拆分的第一个数字
                        int x = num % 10;
                        //将拆分结果放入数组中
                        ary[index] = x;
                        //整除10是将原来的数降低位数
                        num = num / 10;
                        index++;
                    }
                    Console.WriteLine("\t");
                    //利用冒泡排序将上述数组降序排列
                    for (int i = 0; i < ary.Length - 1; i++)
                    {
                        for (int j = 0; j < ary.Length - 1 - i; j++)
                        {
                            //相邻的数比较大小,如果前面的数小于后面的就交换两数的位置
                            if (ary[j] < ary[j + 1])
                            {
                                int temp = ary[j];
                                ary[j] = ary[j + 1];
                                ary[j + 1] = temp;
                            }
                        }
                    }
                    //将上述降序序列组合成一个最大数
                    int max = 0;
                    for (int i = 0; i < ary.Length; i++)
                    {
                        max = max * 10 + ary[i];
                    }
                    Console.WriteLine(max);
                    //逆序后将降序序列编程升序序列
                    for (int i = 0; i < ary.Length / 2; i++)
                    {
                        int temp1 = ary[i];
                        ary[i] = ary[ary.Length - 1 - i];
                        ary[ary.Length - 1 - i] = temp1;
                    }
                    //将逆序后的序列组合成最小数
                    int min = 0;
                    for (int i = 0; i < ary.Length; i++)
                    {
                        min = min * 10 + ary[i];
                    }
                    Console.WriteLine(min);
                    //求最大数与最小数的差值
                    int result = max - min;
                    //将差值给num以便下一次继续进行
                    num = result;
                    //如果差值等于6174,那么结束循环。如果不等于就继续循环
                    if (result == 6174)
                    {
                        break;
                    }
                    count++;
                    //循环次数如果大于10,也认为该数字经过10变换都不能变成6174,我们认为失败
                    if (count > 10)
                    {
                        Console.WriteLine("失败");
                        break;
                    }
                }
                //求出循环进行的次数
                Console.WriteLine(count);
            }
            else
            {
                Console.WriteLine("数字不满足要求");
            }
            }
    }
}

运行结果如下:

163422977.png    

      j_0028.gif 这条路不管多难我也不放弃!加油,Ajax的姑娘!j_0028.gif