Алгоритм для выравнивания чисел с определенной цифрой суммы двух чисел - PullRequest
0 голосов
/ 12 мая 2018

В настоящее время я пытаюсь создать алгоритм, который должен выстраивать числа с определенной суммой цифр. Например, числа с цифрой от 13 до 500. Может ли кто-нибудь дать мне несколько советов о том, как действовать, пожалуйста?

Мой текущий прогресс:

 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);
}

}

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

Существует три фактора.

  • цикл от 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
0 голосов
/ 12 мая 2018

Я публикую простую программу и думаю, что она сделает вашу работу. Потому что вам было немного трудно понять вашу программу.

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);
        }
    }
}

Если у вас возникли проблемы с вышеуказанной программой, пожалуйста, сообщите мне об этом в комментарии. Если это соответствует вашей работе, отметьте его как принятый ответ.

0 голосов
/ 12 мая 2018

Требуется найти все числа в определенном диапазоне (в данном случае 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 229238 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

...