Проблема с вводным программированием на языке C в отношении деления и модуля - PullRequest
0 голосов
/ 03 сентября 2018

Я прошу прощения за плохое название и хочу быть более конкретным, однако я нахожусь на вводном курсе программирования, и у меня нет большого опыта программирования. Задача, с которой я столкнулся, состоит в том, что мне нужно найти общее количество веревки, чтобы подняться на гору. Он должен точно указывать, сколько кусков веревки длиной 100 футов необходимо и сколько отрезков веревки длиной 10 футов. Проблема, с которой я сталкиваюсь, заключается в том, что когда, например, гора составляет 611 футов, я не уверен, как заставить программу отображать, что нужны 6 кусков веревки длиной 100 футов и 2 веревки длиной 10 футов. Мой код учитывает простые цифры, такие как, 600, или 610, или 10 футов, но я не знаю, как компенсировать цифру, которая находится между десятками. Мой код размещен ниже. Опять же, я прошу прощения за то, что не смог сделать это более конкретным.

#include <stdio.h>

int main() {
    // declaration of variables
    int total_height;
    int hundred_feet_rope;
    int ten_feet_rope;

    //prompt user for input information
    printf("How tall is the mountain?\n");
    scanf("%d", &total_height);

    //calculations for how many skeins of 100 feet rope are needed, and how many 10 feet rope is needed
    hundred_feet_rope = total_height / 100;
    ten_feet_rope = total_height % 100 / 10;

    //output results
    printf("You will need %d skeins of 100 feet rope and %d skeins of 10 feet rope!\n", hundred_feet_rope, ten_feet_rope);

    return 0;
}

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Чтобы определить количество 10-футовых веревок, просто прибавьте 9 к оставшейся высоте, а затем разделите на 10, чтобы учесть последнюю растяжку:

ten_feet_rope = (total_height % 100 + 9) / 10;

Тем не менее, ваша формулировка проблемы не совсем точна:

  • что если высота 599 футов? Должны ли быть ответы 6 100-футовых канатов или 5 100-футовых канатов и 10 10-футовых канатов?

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

Вот модифицированная версия:

#include <stdio.h>

int main() {
    // declaration of variables
    int total_height;
    int hundred_feet_rope;
    int ten_feet_rope;

    //prompt user for input information
    printf("How tall is the mountain?\n");
    if (scanf("%d", &total_height) != 1)
        return 1;

    //calculations for how many skeins of 100 feet rope are needed, and how many 10 feet rope is needed
    hundred_feet_rope = (total_height + 9) / 100;
    if (100 * hundred_feet_rope >= total_height)
        ten_feet_rope = 0;
    else
        ten_feet_rope = (total_height % 100 + 9) / 10;

    //output results
    printf("You will need %d skeins of 100 feet rope and %d skeins of 10 feet rope!\n", hundred_feet_rope, ten_feet_rope);

    return 0;
}
0 голосов
/ 03 сентября 2018

Вы можете использовать оператор модуля, чтобы увидеть, больше ли оставшееся число, деленное на 10, больше 0, если да, то добавляется одна веревка длиной 10 футов:

if (total_height % 10 > 0)
    ten_feet_rope++;
0 голосов
/ 03 сентября 2018

Чтобы потреблять дополнительную 10-футовую часть веревки, которая вам требуется для чего-либо между , кратными 10, вы должны нажать свой существующий номер, чтобы учесть эту дополнительную длину веревки до последнего деления.

ten_feet_rope = (total_height % 100 + 9) / 10;
// here ============================^^^

Это распространено в информатике. Пример: симметричное шифрование произвольного количества данных с использованием указанного размера блока.

По крайней мере, я думаю, это то, что вы спрашиваете. Я оставляю задачу учета этого потенциального кровотечения в кратности 100 футов для вас (это может случиться. Предположим, у вас рост 95 футов; в этом случае вам понадобится одна длина 100 футов, а не 10 футов).

...