【上海皿鎏软件股份有限公司】满足比例的无重复的9位数字

版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/yy763496668 https://blog.csdn.net/yy763496668/article/details/78599061

题目:
请设计程序算法,将1-9这9个数字排列组成3个三位数,要求每隔数字只允许出现一次,并且使得这3个三位数满足1:2:3的比例,请在标准输出上打印处所有符合条件的解,每行一个。如:
192 384 576
xxx xxx xxx
… …
解题思路:

我们不要按照题目的思路走下去,容易陷入误区,因为将1-9这9个数字排列组成3个三位数,要求每隔数字只允许出现一次,那么就需要我们找出所有的无重复的9位数字,然后才能去计算每三位的比例是否满足1:2:3,然而对于无重复的9位数最小的是123456789,最大的是987654321,如果要满足前三位是最后三位的3倍,那么前三位是有一个限定的范围的。现在已经知道前三位最小是123。现在我们考虑到这里,再分析一下可行性,因为后三位也是没有重复的三位数,也就是说后三位最大是987,那么前三位最大值就是987/3=329。其实考虑到这里题目已经可以完成80%了,我们只要在123到329之间遍历每一位三位数,只要和中间三位和最后三位满足1:2:3,并且这9位数没有重复的即可。由于计算机在这样的范围内只需遍历206次,因此效率是比较高的,下面我们来讨论一下另外一块的内容—-9位数字没有重复的。

有一种笨方法就是写两个嵌套的循环,查找某一数字中只要出现两次就认为有重复的,如果嵌套循环结束了还没有找到那么就认为没有重复了。代码就不在写了。但是效率很底下恶劣情况下要执行9 *9 =81次循环
因此我采用下面的方法:
我们让9位没有重复的数字去按查找的那个字符去分割,如果分割后的数组长度不等于2,那么就肯定不是无重复的数字,只需要9次循环即可。

static bool IsNoneRepeat(int num1, int num2, int num3)
        {
            string str = "" + num1 + num2 + num3;
            for (int i = 0; i < str.Length; i++)
            {
                if (str.Split(new char[] { str[i]}).Length != 2)
                {
                    return false;
                }
            }
            return true;
        }

*`

全部源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 成比例的没有重复的9位数字
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 123; i < 987/3; i++)
            {
                if (IsNoneRepeat(i, i * 2, i * 3))
                {
                    Console.WriteLine("" +i+i*2+i*3);
                }
            }
        }


        static bool IsNoneRepeat(int num1, int num2, int num3)
        {
            string str = "" + num1 + num2 + num3;
            for (int i = 0; i < str.Length; i++)
            {
                if (str.Split(new char[] { str[i]}).Length != 2)
                {
                    return false;
                }
            }
            return true;
        }
    }
}

`*

猜你喜欢

转载自blog.csdn.net/yy763496668/article/details/78599061