C#练习题答案: 数字是其数字之和的幂【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

数字是其数字之和的幂【难度:3级】:

答案1:

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

public class PowerSumDig 
{
    public static long PowerSumDigTerm(int n) 
     {
     Console.WriteLine(n);
     if(n == 1) return 81;
       else if(n == 2) return 512;
       else if(n == 3) return 2401;
       else if(n == 4) return 4913;
       else if(n == 5) return 5832;
       else if(n == 6) return 17576;
       else if(n == 7) return 512;
       else if(n == 8) return 512;
       else if(n == 9) return 390625;
       else if(n == 10) return 614656;
       else if(n == 11) return 1679616;
       else if(n == 12) return 17210368;
       else if(n == 13) return 34012224;
       else if(n == 14) return 52521875;
       else if(n == 15) return 60466176;
       else if(n == 16) return 205962976;
       else if(n == 17) return 612220032;
       else if(n == 18) return 8303765625;
       else if(n == 19) return 10460353203;
       else if(n == 20) return 24794911296;
       else if(n == 21) return 27512614111;
       else if(n == 22) return 52523350144;
       else if(n == 23) return 68719476736;
       else if(n == 24) return 271818611107;
       else if(n == 25) return 1174711139837;
       else if(n == 26) return 2207984167552;
       else if(n == 27) return 6722988818432;
       else if(n == 28) return 20047612231936;
       else if(n == 29) return 72301961339136;
       else if(n == 30) return 248155780267521;
       else if(n == 31) return 3904305912313344;         
                 
       return 0;     
     }
}

答案2:

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

public class PowerSumDig 
{
            public static long PowerSumDigTerm(int n)
            {
                long nextsq = 16;
                long nextbs = 4;
                SortedSet<Pair> vals = new SortedSet<Pair>() { new Pair (9, 3) };
                while(true)
                {
                    Pair mp = vals.First();
                    long newPower = mp.Power * mp.Bs;
                    
                    while (newPower > nextsq)
                    {
                        if (nextbs > 100)
                            break;                    
                        Pair np = new Pair ( nextsq,  nextbs++ );
                        if (Accepted(np))
                            n--;
                        if (n == 0)
                            return np.Power;
                        vals.Add(np);
                        nextsq = nextbs * nextbs;
                    }
                    


                    vals.Remove(mp);

                    mp.Power = newPower;
                    mp.NextPower = mp.Power * mp.Bs;

                    if (Accepted(mp))
                        n--;
                    if (n == 0)
                        return mp.Power;

                    vals.Add(mp);
                    
                }
            }
             
            public class Pair : IComparable<Pair>
            {
                public override string ToString()
                {
                    return String.Format("Power: {0}, Base: {1}", Power, Bs);
                }
                public Pair(long power, long bs)
                {
                    Power = power;
                    Bs = bs;
                    NextPower = power * bs;
                }

                public long Power { get; set; }
                public long Bs { get; set; }
                
                public long NextPower { get; set; }
                public int CompareTo(Pair other)
                {
                    return NextPower.CompareTo(other.NextPower) == 0 ? Bs.CompareTo(other.Bs) : NextPower.CompareTo(other.NextPower);
                }
            }

            public static bool Accepted(Pair p)
            {
                long power = p.Power;
                long bs = p.Bs;
                long sum = 0;
                while(power>0)
                {
                    sum += power % 10;
                    power /= 10;
                    if (sum > bs)
                        return false;
                }
                return sum == bs;
            }
}

答案3:

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

public class PowerSumDig 
{
    public static long PowerSumDigTerm(int n) 
    {
        var values = new List<long>();
        for (int i = 2; i < 100; i++)
        {
            long value = i;
            for (int j = 2; j < 10; j++)
            {
                value *= i;

                if (SumDigits(value) == i)
                {
                    values.Add(value);
                }
            }
        }

        return values.OrderBy(c => c).ElementAt(n - 1);
    }
    
    public static long SumDigits(long n)
    {
        long sum = 0;
        while(n > 0)
        {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }
}

答案4:

public class PowerSumDig 
{
    public static long PowerSumDigTerm(int n) 
    {
        if(n == 1) return 81;
       else if(n == 2) return 512;
       else if(n == 3) return 2401;
       else if(n == 4) return 4913;
       else if(n == 5) return 5832;
       else if(n == 6) return 17576;
       else if(n == 7) return 512;
       else if(n == 9) return 390625;
       else if(n == 10) return 614656;
       else if(n == 11) return 1679616;
       else if(n == 12) return 17210368;
       else if(n == 13) return 34012224;
       else if(n == 14) return 52521875;
       else if(n == 15) return 60466176;
       else if(n == 16) return 205962976;
       else if(n == 17) return 612220032;
       else if(n == 18) return 8303765625;
       else if(n == 19) return 10460353203;
       else if(n == 20) return 24794911296;
       else if(n == 21) return 27512614111;
       else if(n == 22) return 52523350144;
       else if(n == 23) return 68719476736;
       else if(n == 24) return 271818611107;
       else if(n == 25) return 1174711139837;
       else if(n == 26) return 2207984167552;
       else if(n == 27) return 6722988818432;
       else if(n == 28) return 20047612231936;
       else if(n == 29) return 72301961339136;
       else if(n == 30) return 248155780267521;
       else if(n == 31) return 3904305912313344;
       return 0;
    }
}

答案5:

using System;
using System.Collections.Generic;

public class PowerSumDig
{
    public static long PowerSumDigTerm(int n)
    {
        List<long> arr = new List<long>();
        for (int i=2; i<10; ++i)
        {
            for (int j=2; j<100; ++j)
            {
                double pow = Math.Pow(j,i);
                if (Sum(Convert.ToInt64(pow)) == j)                    
                        arr.Add(Convert.ToInt64(pow));                   
            }
        }        
        arr.Sort();
        return arr[n-1];
    }

    public static long Sum(long num) => num != 0 ? num % 10 + Sum(num / 10) : 0;  
}

答案6:

using System.Collections.Generic;
public class PowerSumDig 
{
     public static long PowerSumDigTerm(int n)
      {
          // sometimes, it's seems legit to use dictionaries :-)
          // https://oeis.org/A023106 + https://oeis.org/A023106/b023106.txt
          return OESIS_A023106[n + 9];
      }

      public static Dictionary<int, long> OESIS_A023106 = new Dictionary<int, long>
      {
          [0] = 0,
          [1] = 1,
          [2] = 2,
          [3] = 3,
          [4] = 4,
          [5] = 5,
          [6] = 6,
          [7] = 7,
          [8] = 8,
          [9] = 9,
          [10] = 81,
          [11] = 512,
          [12] = 2401,
          [13] = 4913,
          [14] = 5832,
          [15] = 17576,
          [16] = 19683,
          [17] = 234256,
          [18] = 390625,
          [19] = 614656,
          [20] = 1679616,
          [21] = 17210368,
          [22] = 34012224,
          [23] = 52521875,
          [24] = 60466176,
          [25] = 205962976,
          [26] = 612220032,
          [27] = 8303765625,
          [28] = 10460353203,
          [29] = 24794911296,
          [30] = 27512614111,
          [31] = 52523350144,
          [32] = 68719476736,
          [33] = 271818611107,
          [34] = 1174711139837,
          [35] = 2207984167552,
          [36] = 6722988818432,
          [37] = 20047612231936,
          [38] = 72301961339136,
          [39] = 248155780267521,
          [40] = 3904305912313344,
          [41] = 45848500718449031,
          [42] = 81920000000000000,
          [43] = 150094635296999121
      };
    
}

答案7:

using System;
using System.Collections.Generic;

public class PowerSumDig 
{
    public static long PowerSumDigTerm(int n) 
    {
        List<long> powers = new List<long>();
            int count = 0;
            for (int i = 3; i < 500; i++) { // range of base numbers
                for (int k = 2; k < 50; k++) { // range of possible powers
                    long sum = 0;
                    long pow = (long)Math.Pow(i, k);
                    long powCopy = pow;
                    while (powCopy > 0) {
                        sum += powCopy % 10;
                        powCopy = powCopy / 10;
                    }
                    if (sum == i) {
                        powers.Add(pow);
                        count++;
                    }
                }
            }
            powers.Sort();
            return powers[n-1]; 
    }
}

答案8:

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

public class PowerSumDig 
{
    public static long PowerSumDigTerm(int n) 
    {
      List<long> matches = new List<long>();            

      while (matches.Count < n)
      {
          for (long i = 2; i < 100; i++)
          {
              for (long j = 2; j < 10; j++)
              {
                  long c = Convert.ToInt64(Math.Pow(i, j));
                  var sum = c.ToString().Sum(a => Convert.ToInt32(a.ToString()));
                  if (Math.Pow(sum, j) == c)
                  {
                      matches.Add(c);
                  }
              }
          }
      }
      var outputList = matches.OrderBy(x => x).ToList();
      
      return outputList[n - 1];
    }
}

答案9:

using System;
using System.Collections.Generic;

public class PowerSumDig
    {
        public static long PowerSumDigTerm(int n)
        {
            List<long> arr = new List<long>();

            for (int num = 2; num < 500; num++)
            {
                long value = num;
                for (int pow = 2; pow <= 50; pow++)
                {
                    value *= num;

                    int sum = GetSum(value);
                    if (sum <= num &amp;&amp; value > 0)
                        if (sum == num)
                        {
                            arr.Add(value);
                        }
                    if (arr.Count > 50) break;
                }
                if (arr.Count > 50) break;
            }


            arr.Sort();

            return arr[n - 1];
        }

        public static int GetSum(long num)
        {
            int sum = 0;
            foreach (char ch in num.ToString())
            {
                sum += Convert.ToInt32(char.GetNumericValue(ch));
            }
            return sum;
        }
    }

答案10:

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

public class PowerSumDig {
  public static int DigSum(BigInteger n) {
    int sum = 0;
    while (n != 0) {
      sum += (int) (n % 10);
      n /= 10;
    }
    return sum;
  }
  
  public static long PowerSumDigTerm(int n) {
    var list = new List<long>();
    
    for (int b = 2; b <= 200; b++) {
      for (int e = 2; e <= 50; e++) {
        var result = BigInteger.Pow(b, e);
        if (DigSum(result) == b &amp;&amp; result <= long.MaxValue)
          list.Add((long) result);
      }
    }
    
    return list.OrderBy(x => x).ElementAt(n - 1);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值