Given an integer U denoting the amount of KWh units of electricity consumed, the task is to calculate the electricity bill with the help of the below charges:
- 1 to 100 units –

- 100 to 200 units –

- 200 to 300 units –

- above 300 units –

Examples:
Input: U = 250
Output: 3500
Explanation:
Charge for the first 100 units – 10*100 = 1000
Charge for the 100 to 200 units – 15*100 = 1500
Charge for the 200 to 250 units – 20*50 = 1000
Total Electricity Bill = 1000 + 1500 + 1000 = 3500
Input: U = 95
Output: 950
Explanation:
Charge for the first 100 units – 10*95 = 950
Total Electricity Bill = 950
Approach 1: The idea is to identify the charge bar in which it falls and then calculate the bill according to the charges mentioned above. Below is the illustration of the steps:
- Check units consumed is less than equal to the 100, If yes then the total electricity bill will be:

-
- Else if, check that units consumed is less than equal to the 200, if yes then total electricity bill will be:

-
- Else if, check that units consumed is less than equal to the 300, if yes then total electricity bill will be:

-
- Else if, check that units consumed greater than 300, if yes then total electricity bill will be:

Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int calculateBill( int units)
{
if (units <= 100)
{
return units * 10;
}
else if (units <= 200)
{
return (100 * 10) +
(units - 100) * 15;
}
else if (units <= 300)
{
return (100 * 10) +
(100 * 15) +
(units - 200) * 20;
}
else if (units > 300)
{
return (100 * 10) +
(100 * 15) +
(100 * 20) +
(units - 300) * 25;
}
return 0;
}
int main()
{
int units = 250;
cout << calculateBill(units);
}
|
Java
import java.util.*;
class ComputeElectricityBill {
public static int calculateBill( int units)
{
if (units <= 100 ) {
return units * 10 ;
}
else if (units <= 200 ) {
return ( 100 * 10 )
+ (units - 100 )
* 15 ;
}
else if (units <= 300 ) {
return ( 100 * 10 )
+ ( 100 * 15 )
+ (units - 200 )
* 20 ;
}
else if (units > 300 ) {
return ( 100 * 10 )
+ ( 100 * 15 )
+ ( 100 * 20 )
+ (units - 300 )
* 25 ;
}
return 0 ;
}
public static void main(String args[])
{
int units = 250 ;
System.out.println(
calculateBill(units));
}
}
|
Python3
def calculateBill(units):
if (units < = 100 ):
return units * 10 ;
elif (units < = 200 ):
return (( 100 * 10 ) +
(units - 100 ) * 15 );
elif (units < = 300 ):
return (( 100 * 10 ) +
( 100 * 15 ) +
(units - 200 ) * 20 );
elif (units > 300 ):
return (( 100 * 10 ) +
( 100 * 15 ) +
( 100 * 20 ) +
(units - 300 ) * 25 );
return 0 ;
units = 250 ;
print (calculateBill(units));
|
C#
using System;
class ComputeElectricityBill{
public static int calculateBill( int units)
{
if (units <= 100)
{
return units * 10;
}
else if (units <= 200)
{
return (100 * 10) +
(units - 100) * 15;
}
else if (units <= 300)
{
return (100 * 10) +
(100 * 15) +
(units - 200) * 20;
}
else if (units > 300)
{
return (100 * 10) +
(100 * 15) +
(100 * 20) +
(units - 300) * 25;
}
return 0;
}
public static void Main(String []args)
{
int units = 250;
Console.WriteLine(calculateBill(units));
}
}
|
Javascript
<script>
function calculateBill(units)
{
if (units <= 100)
{
return units * 10;
}
else if (units <= 200)
{
return (100 * 10)
+ (units - 100)
* 15;
}
else if (units <= 300)
{
return (100 * 10)
+ (100 * 15)
+ (units - 200)
* 20;
}
else if (units > 300)
{
return (100 * 10)
+ (100 * 15)
+ (100 * 20)
+ (units - 300)
* 25;
}
return 0;
}
var units = 250;
document.write(calculateBill(units));
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Approach 2 : In this approach, we can use an array to store the different rate of charges and their respective range of units. This approach can make the code more readable and easier to maintain. Here’s how the code would look like:
C++
#include <bits/stdc++.h>
using namespace std;
const int n = 4;
int calculateBill( int units)
{
int charges[n] = { 10, 15, 20, 25 };
int range[n] = { 100, 100, 100, INT_MAX };
int bill = 0;
for ( int i = 0; i < n; i++) {
if (units <= range[i]) {
bill += charges[i] * units;
break ;
}
else {
bill += charges[i] * range[i];
units -= range[i];
}
}
return bill;
}
int main()
{
int units = 250;
cout << calculateBill(units);
return 0;
}
|
Java
import java.util.*;
public class Main {
public static final int n = 4 ;
public static int calculateBill( int units) {
int [] charges = { 10 , 15 , 20 , 25 };
int [] range = { 100 , 100 , 100 , Integer.MAX_VALUE};
int bill = 0 ;
for ( int i = 0 ; i < n; i++) {
if (units <= range[i]) {
bill += charges[i] * units;
break ;
}
else {
bill += charges[i] * range[i];
units -= range[i];
}
}
return bill;
}
public static void main(String[] args) {
int units = 250 ;
System.out.println(calculateBill(units));
}
}
|
Python3
import sys
MAX_INT = sys.maxsize
n = 4
def calculateBill(units):
charges = [ 10 , 15 , 20 , 25 ]
range_ = [ 100 , 100 , 100 , MAX_INT]
bill = 0
for i in range (n):
if units < = range_[i]:
bill + = charges[i] * units
break
else :
bill + = charges[i] * range_[i]
units - = range_[i]
return bill
units = 250
print (calculateBill(units))
|
C#
using System;
public class Program {
const int n = 4;
static int CalculateBill( int units)
{
int [] charges = { 10, 15, 20, 25 };
int [] range = { 100, 100, 100, int .MaxValue };
int bill = 0;
for ( int i = 0; i < n; i++) {
if (units <= range[i]) {
bill += charges[i] * units;
break ;
}
else {
bill += charges[i] * range[i];
units -= range[i];
}
}
return bill;
}
public static void Main()
{
int units = 250;
Console.WriteLine(CalculateBill(units));
}
}
|
Javascript
const n = 4;
function calculateBill(units) {
const charges = [10, 15, 20, 25];
const range = [100, 100, 100, Number.MAX_VALUE];
let bill = 0;
for (let i = 0; i < n; i++) {
if (units <= range[i]) {
bill += charges[i] * units;
break ;
} else {
bill += charges[i] * range[i];
units -= range[i];
}
}
return bill;
}
const units = 250;
console.log(calculateBill(units));
|
Time Complexity : The time complexity of the calculateBill function is O(n), where n is the number of ranges of units and their respective charges. This is because the function uses a for loop to iterate through the range and charges arrays, and for each iteration, it performs a constant amount of work (calculating the bill based on the units consumed).
Since n is a constant value, the time complexity can be considered as O(1) in the best-case scenario. The function takes a constant amount of time to run, regardless of the number of units consumed.
Auxiliary Space : The space complexity of this code is O(n), where n is the number of rate of charges. This is because the program uses two arrays, charges and range, both of which have a size of n elements. The arrays take up 2 * n * sizeof(int) bytes of memory. In this case, n = 4, so the total memory occupied by the arrays is 2 * 4 * sizeof(int).
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
04 Apr, 2023
Like Article
Save Article