C#练习题答案: 找到除数!【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

找到除数!【难度:1级】:

答案1:

using System;
using System.Linq;
using System.Collections.Generic;

public class Kata
{
  public static int[] Divisors(int n)
  {
    List<int> l = new List<int>();
    for (int i = 2; i <= Math.Sqrt(n); i++) if (n % i == 0) l.Add(i);
    if (l.Count == 0) return null;
    List<int> k = new List<int>(Enumerable.Reverse(l.ToArray().Select(x => n / x).ToArray().Where(x => !l.Contains(x))));
    l.AddRange(k);
    return l.ToArray();
  }
}

答案2:

using System.Linq;
using System;

public class Kata
{
  public static int[] Divisors(int n)
  {
   int[] divisors = Enumerable.Range(2, (int)Math.Sqrt(n)).Where(x => x < n &amp;&amp; n % x == 0).SelectMany(x => new[] { x, n / x }).GroupBy(x => x).Select(g => g.First()).OrderBy(x => x).ToArray();
            return divisors.Length != 0 ? divisors : null;
  }
}

答案3:

using System.Collections.Generic;
using System.Linq.Dynamic;
using System.Linq;
using System;

public class Kata
{
  public static int[] Divisors(int n)
        {
            List<int> divisors = new List<int>();
            int max = (int)Math.Sqrt(n);

            for (int i = 2; i <= max; i++)
            {
                if (n % i == 0)
                {
                    divisors.Add(i);
                    if (i != n / i)
                        divisors.Add(n / i);
                }
            }
            if(divisors.Count() == 0)
              return null;
            else
              return divisors.OrderBy(x => x).ToArray();
        }
}

答案4:

using System;
using System.Collections.Generic;

public class Kata
{
    private static List<int> _result = new List<int>();
    private static int _previousDivisor;
    private static int _sqrt;

    public static int[] Divisors(int n)
    {
        _previousDivisor = n;
        _sqrt = (int) Math.Sqrt(n);
        _result.Clear();
        for (int i = 2; i < _previousDivisor &amp;&amp; i <= _sqrt; i++)
        {
            if (n % i == 0)
            {
                _result.Add(i);
                _previousDivisor = n / i;
                if (i != _previousDivisor)
                {
                    _result.Add(_previousDivisor);
                }
            }
        }
        if (_result.Count > 0)
        {
            _result.Sort();
            return _result.ToArray();
        }
        else return null;

    }
}

答案5:

using System.Collections.Generic;
using System;
using System.Linq;

public class Kata
{
      public static int[] Divisors(int n)
      {
          const int lowerBound = 1;
          const int firstPrimeNumber = 2;

          if (IsOutsideTolerance(n, lowerBound)) return null;
          if (n == firstPrimeNumber) return null;

          var divisors = GetDivisors(n);

          if (IsPrimeNumber(divisors)) return null;

          divisors.Sort();

          return divisors.ToArray();
      }

      private static bool IsOutsideTolerance(int n, int lowerBound)
      {
          return n <= lowerBound;
      }

      private static bool IsPrimeNumber(List<int> divisors)
      {
          return !divisors.Any();
      }

      private static List<int> GetDivisors(int n)
      {
          var divisors = new List<int>();

          var squareRouteOfNumber = (int)Math.Sqrt(n);
          int inverse;

          for (int i = 2; i <= squareRouteOfNumber; ++i)
          {
              if (n % i == 0)
              {
                  divisors.Add(i);

                  inverse = n / i;

                  if (i != inverse)
                  {
                      divisors.Add(inverse);
                  }
              }
          }

          return divisors;
      }
  }

答案6:

using System;
using System.Collections.Generic;

public class Kata
{
    public static int[] Divisors(int n)
    {
        var divisors = new List<int>();
        int currentDivisor = 2;
        double root = Math.Sqrt(n);

        while (currentDivisor <= root)
        {
            if (n % currentDivisor == 0)
            {
                divisors.Add(currentDivisor);

                if (currentDivisor != root)
                    divisors.Add(n / currentDivisor);
            }

            currentDivisor++;
        }

        if (divisors.Count == 0)
            return null;

        divisors.Sort();
        return divisors.ToArray();
    }
}

答案7:

using System;
using System.Linq;
using System.Collections.Generic;

public class Kata
{
    public static int[] Divisors(int n)
    {
        var result = new List<int>();
        for (var i = 2; i <= Math.Sqrt(n); i++)
            if (n % i == 0)
                result.Add(i);

        if (result.Count == 0)
            return null;

        result.AddRange(result.Select(x => n / x).Where(x => !result.Contains(x)).Reverse());
        return result.ToArray();
    }
}

答案8:

using System;
using System.Linq;
using System.Collections.Generic;
public class Kata
{
  public static int[] Divisors(int n)
  {
  List<int> sample= new List<int>(){};
    for (int i = 2; i <= Math.Sqrt(n); i++)
    {
      if (n % i == 0)
      {
        sample.Add(i);
        sample.Add(n/i);
      }
    }  
    sample = sample.OrderBy(x=>x).ToList();
    return sample.Count() > 0 ? sample.Distinct().ToArray() : null;
  }
}

答案9:

using System.Collections.Generic;
using System;
using System.Linq;
public class Kata
{
  public static int[] Divisors(int n)
  {
    var listNumber = new List<int>();
    for (int i = 2; i <= Math.Sqrt(n); i++) if (n % i == 0) listNumber.Add(i);
    if (listNumber.Count == 0) return null;
    List<int> k = new List<int>(Enumerable.Reverse(listNumber.ToArray().Select(x => n / x).ToArray().Where(x => !listNumber.Contains(x))));
    listNumber.AddRange(k);
    return listNumber.ToArray();
  }
}

答案10:

using System.Collections.Generic;
using System.Linq;

public class Kata
{
  public static int[] Divisors(int n)
  {
    List<int> result = new List<int>();

    for (int i = 2; i <= n / i; i++)
    {
      if (n % i == 0)
      {
        result.Add(i);
        if (i != n / i)
        {
          result.Add(n / i);
        }
      }
    }

    result.Sort();
    return result.Count == 0 ? null : result.ToArray();
  }
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值