Sunday, July 17, 2016

Hackerrank Day 26: Nested Logic

The problem:
Task 
Your local library needs your help! Given the expected and actual return dates for a library book, create a program that calculates the fine (if any). The fee structure is as follows:
  1. If the book is returned on or before the expected return date, no fine will be charged (i.e.: .
  2. If the book is returned after the expected return day but still within the same calendar month and year as the expected return date, .
  3. If the book is returned after the expected return month but still within the same calendar year as the expected return date, the .
  4. If the book is returned after the calendar year in which it was expected, there is a fixed fine of .
Input Format
The first line contains  space-separated integers denoting the respective , and  on which the book was actually returned. 
The second line contains  space-separated integers denoting the respective , and  on which the book was expected to be returned (due date).
Constraints
Output Format
Print a single integer denoting the library fine for the book received as input.
Sample Input
9 6 2015
6 6 2015
Sample Output
45
Explanation
Given the following return dates: 
Actual:  
Expected: 
Because , we know it is less than a year late. 
Because , we know it's less than a month late. 
Because , we know that it was returned late (but still within the same month and year).
Per the library's fee structure, we know that our fine will be . We then print the result of  as our output.

My submission:

 #include <cmath>  
 #include <cstdio>  
 #include <vector>  
 #include <iostream>  
 #include <algorithm>  
 #include <cstring>  
 using namespace std;  
 int main() {  
   /* Enter your code here. Read input from STDIN. Print output to STDOUT */  
    int n[6];  
   int len = sizeof(n)/sizeof(*n);  
   for(int i =0; i<len;i++){  
     cin>>n[i];  
   }  
   int fine = 0;  
   int yearDif = n[2]-n[5];  
   int monthDif = n[1]-n[4];  
   int dayDif = n[0]-n[3];  
   if (yearDif>0) fine = 10000;  
   else{  
     if(monthDif>0&&yearDif==0) fine = 500*monthDif;  
     else{  
       if (dayDif>0&&monthDif==0) fine = 15*dayDif;  
     }  
   }  
   cout<<fine;    
 }  

No comments:

Post a Comment