C#练习题答案: 简单有趣#21:向数氏族【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

这是一篇关于C#编程的练习题目,名为"向数氏族",难度级别为1级。文章包含了从答案1到答案9的多种解答方案。
摘要由CSDN通过智能技术生成

简单有趣#21:向数氏族【难度:1级】:

答案1:

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

namespace myjinxin
{
    using System;
    
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k){
          List<string> result = new List<string>();
          StringBuilder builder = new StringBuilder();


          for (int i = 1; i <= k; i++)
          {
              for (int j = 0; j < divisors.Length; j++)
              {
                  if (i % divisors[j] == 0)
                      builder.Append("Y");
                  else
                      builder.Append("N");
              }

              result.Add(builder.ToString());
              builder.Clear();
          }

          return result.Distinct().Count();
          
        }
    }
}

答案2:

namespace myjinxin {
    using System.Collections.Generic;
    using System.Linq;

    public class Kata {
        public int NumberOfClans( int[] divisors, int k ) {
            var d = new Dictionary<int, bool[]>( k + 1 );
            for ( int i = 1; i <= k; i++ ) {
                d[ i ] = new bool[divisors.Length];
                for ( int j = 0; j < divisors.Length; j++ ) {
                    if ( i%divisors[ j ] == 0 ) {
                        d[ i ][ j ] = true;
                    }
                }
            }
            return d.GroupBy( p => string.Concat( p.Value ) ).Count( );
        }
    }
}

答案3:

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

namespace myjinxin
{
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k)
        {
            return Enumerable.Range(1, k)
                .Select(num => divisors
                    .Select((div, index) => num % div == 0 ? (int)Math.Pow(2, index) : 0).Sum())
                .GroupBy(sum => sum)
                .Count();
        }
    }
}

答案4:

namespace myjinxin
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k){
            List<string> count = new List<string>();
            for (int i = 1; i <= k; i++)
            {
                count.Add(string.Join("",divisors.Select((x, index) => i % x == 0 ? index.ToString() : "")));
            }
            return count.Distinct().Count();
        }
    }
}

答案5:

namespace myjinxin
{
    using System.Linq;
    using System.Collections.Generic;
   public class Kata
    {
        public int NumberOfClans(int[] divisors, int k)
        {
            List<int> NN = new List<int>();
            List<int> NY = new List<int>();
            List<int> YY = new List<int>();
            divisors = divisors.Distinct().ToArray();
            int res = 0;
            for (int i = 1; i < k; i++)
            {
                for (int j = i + 1; j <= k; j++)
                {
                    if (divisors.All(x => i % x != 0 &amp;&amp; j % x != 0))
                    {
                        if (NN.All(x => x != i &amp;&amp; x != j)) res++;
                        NN.Add(i); NN.Add(j);
                    }
                    else if (divisors.All(x => i % x == 0 &amp;&amp; j % x == 0))
                    {
                        if (YY.All(x => x != i &amp;&amp; x != j)) res++;
                        YY.Add(i); YY.Add(j);
                    }
                    else if (divisors.Any(x => i % x != 0 &amp;&amp; j % x == 0) ||
                        divisors.Any(x => i % x == 0 &amp;&amp; j % x != 0)) continue;
                    else
                    {
                        if (NY.All(x => x != i &amp;&amp; x != j)) res++;
                        NY.Add(i); NY.Add(j);
                    }
                }
            }
            NN = NN.Distinct().ToList();
            NY = NY.Distinct().ToList();
            YY = YY.Distinct().ToList();
            res += (k - NN.Count - NY.Count - YY.Count);
            return res;
        }
    }
}

答案6:

namespace myjinxin
{
  using System.Collections.Generic;
  using System.Linq;
  
  public class Kata
  {
    public int NumberOfClans(int[] divisors, int k)
    {
      var divideResults = new List<string>();
      
      for (int i = 1; i <= k; i++)
      {
        divideResults.Add(string.Join("", divisors.Select(e => i % e == 0 ? 1 : 0)));
      }
      
      return divideResults.GroupBy(e => e).Count();
    }
  }
}

答案7:

namespace myjinxin
{
    using System;
    using System.Collections.Generic;
    using System.Collections;
    
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k)
        {
            int friendless = 0;
            HashSet<int> clans = new HashSet<int>();
            int[] clanCount = new int[k+1];
            for (int i = 1; i <= k; i++)
            {
                for (int j = i + 1; j <= k; j++)
                {
                    bool friends = true;
                    BitArray clanNumber = new BitArray(divisors.Length);
                    for (int d = 0; d < divisors.Length; d++)
                    {
                        if (i % divisors[d] == 0 &amp;&amp; j % divisors[d] == 0)
                        {
                            clanNumber[d] = true;
                        }
                        else if (i % divisors[d] != 0 &amp;&amp; j % divisors[d] != 0)
                        {
                            clanNumber[d] = false;
                        }
                        else
                        {
                            friends = false;
                            break;
                        }
                    }
                    if (friends)
                    {
                        int[] array = new int[1];
                        clanNumber.CopyTo(array, 0);
                        clans.Add(array[0]);
                        clanCount[i]++;
                        clanCount[j]++;
                    }
                }
                if (clanCount[i] == 0)
                {
                    friendless++;
                    clanCount[i]++;
                }
            }
            return friendless + clans.Count;
        }
    }
}

答案8:

namespace myjinxin
{
    using System;
    using System.Collections.Generic;
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k)
        {
            var set = new HashSet<List<int>>(new IntListEquality());
            for (int i = 1; i <= k; i++)
            {
                var list = new List<int>();
                foreach (int t in divisors)
                    if (i % t == 0) list.Add(t);
                set.Add(list);
            }
            return set.Count;
        }
    }
    public class IntListEquality : IEqualityComparer<List<int>>
    {
        public bool Equals(List<int> x, List<int> y)
        {
            if (x.Count != y.Count) return false;
            for (int i = 0; i < x.Count; i++)
                if (x[i] != y[i]) return false;
            return true;
        }

        public int GetHashCode(List<int> obj) => 0;
    }
}

答案9:

namespace myjinxin
{
    using System;
    using System.Linq;
    using System.Collections.Generic;
    public class Kata
    {
        public int NumberOfClans(int[] divisors, int k){
        
          var clans=new Dictionary<string,int>();
          for(var n=1;n<=k;n++){
             var t=string.Join("",divisors.Select(x=>n%x==0?0:1));
             if(clans.ContainsKey(t)==false) clans.Add(t,1);
          }
          return clans.Count();
        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值