首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助解决并找到相应的周薪。

需要帮助解决并找到相应的周薪。
EN

Stack Overflow用户
提问于 2022-11-16 04:29:19
回答 1查看 42关注 0票数 0

问题就在截图里。

这是我的代码和方法。但是结果是关闭的,我认为小时值和速率值是pay_rate函数没有相应更新。

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>
float pay_rate(float, float*);
float total_pay(float, float, float*);
int main() {
  float h, rate, total_salary = 0;
  printf("Input worked hours: ");
  scanf("%f", &h);
  pay_rate(h, &rate);
  // printf("%f", rate);
  total_pay(h ,rate,&total_salary);
  printf("\n%f", total_salary);
  
}

float pay_rate(float hour, float* rate) {
  float temp = 0;
  if (0 < hour && hour <= 40)
  {
    *rate = 12.5;
    hour = (hour)-40;
    // printf("\n%f", hour)/;
  } else if (0 < hour && hour <= 4) {
    *rate = 15;
    hour = hour-4;
    // printf("\n%f", *hour);
  } else if (hour > 0) {
    *rate = 20;
    // printf("\n%f",*hour);
  }
  return *rate;
}

float total_pay(float hours, float rate, float* salary){
  *salary = rate * hours;
  return *salary;
  
}

当我输入41个小时时,结果是820。但是结果必须是40*12.5,然后是+1*15,它等于515

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 09:34:56

你误解了这个问题。因此,即使是手动预期的输出也是错误的。

首先,你需要计算一个基薪率,它只取决于A、B、C或D类。

类别是一个输入参数。它必须通过读取从用户(A或B或C或D),然后基本工资率是固定的。

然后,根据工作时间的不同,超过给定阈值的工作时间的一部分(而且只有一部分)将乘以一个因子。

因此,如果它超过44,那么只有超过44小时才会乘以2,大于40或小于等于44的数将乘以1.5。在0到40之间的工作时间将以基本工资率支付。

在简单的C++中,您可以编写如下内容:

代码语言:javascript
复制
#include <iostream>

// Get the pay rate based in the pay category
double pay_rate(const char payCategory) {
    double result = 0;
    if (payCategory == 'A') 
        result = 12.5;
    else if (payCategory == 'B') 
        result = 15;
    else if (payCategory == 'C') 
        result = 20;
    else if (payCategory == 'D') 
        result = 25;
    else
        std::cerr << "\n*** Error: Invalid Pay Category\n\n";
    return result;
}

// Calculate the toal weekly pay based on pay category and hours worked
double total_pay(const char payCategory, const unsigned int hours) {
    
    // The result
    double pay = 0;
    
    // Get base hourly rate
    double hourlyRate = pay_rate(payCategory);
    
    // Was the working time more than 44 hours?
    if (hours > 44)
        pay = (hours-44) * hourlyRate * 2 + 4 * hourlyRate * 1.5 + 40 * hourlyRate;
    // NOt more than 44. Maybe more than 40?
    else if (hours > 40)
        pay = (hours-40) * hourlyRate * 1.5 + 40 * hourlyRate;
    else
        // Just in the range of 0-4ß
        pay = hours * hourlyRate;
    return pay;
}

int main() {
    // Give user instruction. Enter Pay Category and number of hours worked
    std::cout << "Enter payment category (one of A,B,C,D) and number of hours worked:\n";
    
    // Get input from user and validate it
    char payCategory = '\0';
    unsigned int hours = 0;
    
    if ((std::cin >> payCategory >> hours) and (payCategory=='A' or payCategory=='B' or payCategory=='C' or payCategory=='D'))
    
        // Input was valid. SHow result
        std::cout << "\n\n\nTotal salary:  " << total_pay(payCategory, hours);
        
    else
        std::cerr << "\n\n*** Error: Invalid Input\n\n";
}

使用更先进的方法,我们将使代码数据被驱动。也就是说,您只需要给出数据,所以类别数据和范围数据。

这样,您可以简单地修改值,逻辑和代码将是相同的。

例如,请参见:

代码语言:javascript
复制
#include <iostream>
#include <map>

std::map<char, double> salaryByCategory {{'A', 12.5}, {'B', 15}, {'C', 20}, {'D', 25}};
std::map<unsigned int, double> overtimeFactor{{0,1},{40,1.5},{44,2}};

int main() {
    // Give user instruction. Enter Pay Category and number of hours worked
    std::cout << "Enter payment category (one of A,B,C,D) and number of hours worked:\n";
    
    // Get input from user and validate it
    char payCategory = '\0';
    unsigned int hours = 0;
    
    if ((std::cin >> payCategory >> hours) and salaryByCategory.count(payCategory) == 1) {
        
        // Get base salary based on category
        double baseSalary{salaryByCategory[payCategory]};
        
        // This is the resulting payment that we will output at the end
        double payment{};
        
        // Calculate total payment
        for (auto riter = overtimeFactor.rbegin(); riter != overtimeFactor.rend(); ++riter) {
            
            // If we are above an upper border
            if (hours > riter->first) {
                
                // Calculate hours that are above the max threshold
                const unsigned int hoursAbove = hours - riter->first;
                
                // Payment for this range
                payment += (hoursAbove * riter->second * baseSalary);
                
                // New hours (without the already calculated one)
                hours -= hoursAbove;
            }
        }
        // Show result
        std::cout << "\n\nResult: " << payment << '\n';
    }
    else
        std::cerr << "\n\n*** Error: Invalid Input\n\n";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74455192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档