【问题标题】:Algorithm to line up numbers with a specific digit sum of two numbers用两个数字的特定数字总和排列数字的算法
【发布时间】:2018-10-22 17:20:12
【问题描述】:

我目前正在尝试创建一种算法,该算法应该能够将数字与特定数字总和对齐。例如在 1 到 500 之间的数字和为 13 的数字。有人可以给我一些关于如何进行的建议吗?

我目前的进度:

 public class Digitsum{

static int Digitsum2(int number) {  //method to find out the digit sum from numbers between 1 and 500
    int sum = 0;
    if(number == 0){
        return sum;
    } else {
        sum += (number%10);
        Digitsum2(number/10);

    }
    return sum;
        }

static int Digitsum13(int x) { //method to line up the numbers with a digit sum of 13

    while (x <= 500) {
        x++;
        Digitsum2(x);
    }
    return x; 

}


public static void main(String[ ] args) {
   Digitsum13(13);
}

}

【问题讨论】:

  • 能否请您添加更多示例(不是在代码中,只是输入输出)
  • “排队”是什么意思?
  • 输入:Digitsum13(20);输出:1 到 500 之间的每个数字,数字总和为 20
  • 排队 = System.out.println(1-500 之间的数字,数字总和为 13)

标签: java math sum int digit


【解决方案1】:

您想要查找特定范围内的所有数字(在本例中为 1-500),其中各个数字的总和为特定目标总和(在本例中为 13)并打印它们的列表。

DigitSumClass:

public class Digitsum {

    static void digitSum(int target)
    {
    System.out.println("Target: " + target);
        for(int i = 1; i <= 500; i++)
        {
            int currsum = 0;
            int currnum = i;
            
            while(currnum > 0 )
            {
                currsum += currnum%10;
                currnum /= 10;
            }
            if( currsum == target)
            {
                //print each match
                System.out.println(i);
            }
        }
        
    }

    public static void main(String[] args) {
        System.out.println("Starting iteration from 1-500");
        digitSum(13);
    }

}

测试用例:

从 1-500 开始迭代目标:13 49 58 67 76 85 94 139 148 157 166 175 184 193 229 238 247 256 265 274 283 292 319 328 337 346 355 364 373 382 391 409 418 427 436 445 454 463 472 481 490

从 1-500 开始迭代目标:2 2 11 20 101 110 200

从 1-500 开始迭代目标:19 199 289 298 379 388 397 469 478 487 496

【讨论】:

    【解决方案2】:

    有三个因素。

    • 从 1 循环到 500
    • 计算数字总和
    • 检查数字总和是否是可接受的值

    如果你分开考虑这些,代码会很干净。


    public class Digitsum {
        static int digitsum(int n) {
            int ret = 0;
            while (n != 0) {
                ret += n % 10;
                n /= 10;
            }
            return ret;
        }
        public static void main(String[ ] args) {
            // digitsum2
            System.out.println("------- digitsum2-------");
            for (int i = 1; i <= 500; i++)
                if (digitsum(i) == 2)
                    System.out.println(i);
    
            // digitsum13
            System.out.println("------- digitsum13-------");
            for (int i = 1; i <= 500; i++)
                if (digitsum(i) == 13)
                    System.out.println(i);
        }
    }
    

    digitsum2的输出如下

    ------- digitsum2-------
    2
    11
    20
    101
    110
    200
    

    【讨论】:

      【解决方案3】:

      我发布了一个简单的程序,并认为它会完成你的工作。因为理解你的程序有点困难。

      class Example{
      public static void main(String args[]){
          digitsum(13);
      }
      
      public static void digitsum(int num){
          int value;
          int copyofvalue;
      
          for(int i=1;i<500;i++){
              int sum=0;
              value=i;
              copyofvalue=value;
      
              while(value!=0){
                  sum+=value%10;
                  value/=10;
              }
      
              if(sum==num){
                  System.out.println(copyofvalue);
              }
          }
      }
      

      如果您对上述程序有任何问题,请通过评论告诉我。 如果它适合您的工作,请将其标记为已接受的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 2011-03-26
        相关资源
        最近更新 更多