Программа на C ++ иногда дает неправильный ответ - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть эта программа, которая должна дать мне наименьшую первоначальную цену товара, основываясь на входных данных пользователя. Существуют некоторые условия, например, если количество маски больше 9, цена будет снижена на 10%, 15%, если ее больше 30, и 20%, если больше 50. Результат должен дать ответ. Здесь мой код:

#include <iostream>
#include <iomanip>
using namespace std;
    int mprice; //price input
    int mquantity; //quantity input
    int n; //first input
    int fee = 2000; //const fee
    float finalprice;
    float maskCalc(int price, int quantity) {
        float holder = (float)(price - fee) / (float)(quantity);
            if (quantity > 0) {
                finalprice = holder;
            }
            //if between 10 and 30
            else if (quantity > 9) {
                finalprice = holder / 0.9;
            }
            //between 30 and 49
            else if (quantity > 30) {
                finalprice = holder / 0.85;
            }
            //more than 50
            else if (quantity > 49) {
                finalprice = holder / 0.8;
            }
            //less than ten
            else {
                finalprice = holder;
            }
        return finalprice;
    }
int main()
{   
    cin >> n;
    float arr[n];
    // Input oruulah loop
    for (int i = 0; i < n; i++) {
        cin >> mprice >> mquantity;
        x = maskCalc(mprice, mquantity);
        arr[i] = x;
    }
    for (int i = 1; i < n; i++) {
        if (arr[0] > arr[i]) {
            arr[0] = arr[i];
        }
    }
    printf("%.2f", arr[0]);
    return 0;
}

Я дал 3 3000 3 7000 10 3000 1, ответ был 555,56, что правильно, но когда я что-то вроде 3 2500 1 7000 10 3000 1, он дает мне 0,00 в то время как я ожидал, что это даст мне 500,00. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 14 апреля 2020

Сначала нужно проверить наибольшее количество в переключателе if-else, иначе вы всегда попадете в случай по умолчанию (<10). </p>

        //more than 50
        if (quantity >= 50) {
            finalprice = holder / 0.8;
        }
        //between 30 and 49
        else if (quantity >= 30) {
            finalprice = holder / 0.85;
        }
        //if between 10 and 30
        else if (quantity >= 10) {
            finalprice = holder / 0.9;
        }
        //less than ten
        else {
            finalprice = holder;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...