The problem is:
The base unit of currency was the As. All other coins are measured relative to each other.
Quadrans: 1/2 a Semis Semis: 1/2 an As As: Base Unit Dupondius: 2 Asses Sestertius: 2 Dupondii Quinarius: 2 Sesterii Denarius: 2 Quinarii Antoninianus: 2 Denarii Gold Quinarius: 25 Quinarii Aureus: 25 Denarii
Write a program that takes as input the number of Quadrans a person has in their account. This number is always an integer because there is no smaller currency than the Quadrans. Then print out the minimal number of coins that can be used to represent this amount.
Start with the largest value currency and work down to the smallest. For example, if the user has 12 Quadrans, this is 1 Dupondius and 1 As.
EXAMPLE OUTPUT:
Enter Number of Quadrans: 21432 Aureus: 13 Gold Quinarius: 0 Antoninianus: 4 DenarEnter Number of Quadrans: 21432 Aureus: 13 Gold Quinarius: 0 Antoninianus: 4 Denarius: 1 Quinarius: 1 Sestertius: 1 Dupondius: 1 As: 0 Semis: 0 Quadrans: 0 ius: 1 Quinarius: 1 Sestertius: 1 Dupondius: 1 As: 0 Semis: 0 Quadrans: 0
A restriction of the assignment is I cannot use complex functions with lists/flags to solve this question.
Define the Units:
As = 1
Semis = 0.5 * As
Quadrans = 0.5 * Semis
Dupondius = 2 * As
Sestertius = 2 * Dupondius
Quinarius = 2 * Sestertius
Denarius = 2 * Quinarius
Antoninianus = 2 * Denarius
GoldQuinarius = 25 * Quinarius
Aureus = 25 * Denarius
used accountBalance var. for quadrans amount need to be converted
accountBalance = int(input( "Enter Number of Quadrans: " ))
tried to convert into least amount of coins needed here using arithmetic operations
AureusP = (accountBalance * 0.25) // Aureus
GoldQuinariusP = (accountBalance - AureusP) // GoldQuinarius
AntoninianusP = (accountBalance - GoldQuinariusP) // Antoninianus
DenariusP = (accountBalance - AntoninianusP) // Denarius
QuinariusP = (accountBalance - DenariusP) // Quinarius
SestertiusP = (accountBalance - QuinariusP) // Sestertius
DupondiusP = (accountBalance - SestertiusP) // Dupondius
AsP = (accountBalance - DupondiusP) // As
SemisP = (accountBalance - AsP) // Semis
QuadransP = (accountBalance - SemisP) // Quadrans
Have to print the number of coins used to represent the account balance
print("Aureus: ",AureusP)
print("Gold Quinarius: ", GoldQuinariusP)
print("Antoninianus: ", AntoninianusP)
print("Denarius: ", DenariusP)
print("Quinarius: ", QuinariusP)
print("Sestertius: ", SestertiusP)
print("Dupondius: ", DupondiusP)
print("As: ", AsP)
print("Semis: ", SemisP)
print("Quadrans: ", QuadransP)
Now I have tried to get the output to match with the example above, have managed to get the Aureus amount to line up but it seems I'm doing something wrong after.
Can this problem be solved without implementing flags and embedding lists?
This is the output Im getting:
Enter Number of Quadrans: 21432
Aureus: 13.0
Gold Quinarius: 107.0
Antoninianus: 666.0
Denarius: 1297.0
Quinarius: 2516.0
Sestertius: 4729.0
Dupondius: 8351.0
As: 13081.0
Semis: 16702.0
Quadrans: 18920.0
The problem is:
The base unit of currency was the As. All other coins are measured relative to each other.
Quadrans: 1/2 a Semis Semis: 1/2 an As As: Base Unit Dupondius: 2 Asses Sestertius: 2 Dupondii Quinarius: 2 Sesterii Denarius: 2 Quinarii Antoninianus: 2 Denarii Gold Quinarius: 25 Quinarii Aureus: 25 Denarii
Write a program that takes as input the number of Quadrans a person has in their account. This number is always an integer because there is no smaller currency than the Quadrans. Then print out the minimal number of coins that can be used to represent this amount.
Start with the largest value currency and work down to the smallest. For example, if the user has 12 Quadrans, this is 1 Dupondius and 1 As.
EXAMPLE OUTPUT:
Enter Number of Quadrans: 21432 Aureus: 13 Gold Quinarius: 0 Antoninianus: 4 DenarEnter Number of Quadrans: 21432 Aureus: 13 Gold Quinarius: 0 Antoninianus: 4 Denarius: 1 Quinarius: 1 Sestertius: 1 Dupondius: 1 As: 0 Semis: 0 Quadrans: 0 ius: 1 Quinarius: 1 Sestertius: 1 Dupondius: 1 As: 0 Semis: 0 Quadrans: 0
A restriction of the assignment is I cannot use complex functions with lists/flags to solve this question.
Define the Units:
As = 1
Semis = 0.5 * As
Quadrans = 0.5 * Semis
Dupondius = 2 * As
Sestertius = 2 * Dupondius
Quinarius = 2 * Sestertius
Denarius = 2 * Quinarius
Antoninianus = 2 * Denarius
GoldQuinarius = 25 * Quinarius
Aureus = 25 * Denarius
used accountBalance var. for quadrans amount need to be converted
accountBalance = int(input( "Enter Number of Quadrans: " ))
tried to convert into least amount of coins needed here using arithmetic operations
AureusP = (accountBalance * 0.25) // Aureus
GoldQuinariusP = (accountBalance - AureusP) // GoldQuinarius
AntoninianusP = (accountBalance - GoldQuinariusP) // Antoninianus
DenariusP = (accountBalance - AntoninianusP) // Denarius
QuinariusP = (accountBalance - DenariusP) // Quinarius
SestertiusP = (accountBalance - QuinariusP) // Sestertius
DupondiusP = (accountBalance - SestertiusP) // Dupondius
AsP = (accountBalance - DupondiusP) // As
SemisP = (accountBalance - AsP) // Semis
QuadransP = (accountBalance - SemisP) // Quadrans
Have to print the number of coins used to represent the account balance
print("Aureus: ",AureusP)
print("Gold Quinarius: ", GoldQuinariusP)
print("Antoninianus: ", AntoninianusP)
print("Denarius: ", DenariusP)
print("Quinarius: ", QuinariusP)
print("Sestertius: ", SestertiusP)
print("Dupondius: ", DupondiusP)
print("As: ", AsP)
print("Semis: ", SemisP)
print("Quadrans: ", QuadransP)
Now I have tried to get the output to match with the example above, have managed to get the Aureus amount to line up but it seems I'm doing something wrong after.
Can this problem be solved without implementing flags and embedding lists?
This is the output Im getting:
Enter Number of Quadrans: 21432
Aureus: 13.0
Gold Quinarius: 107.0
Antoninianus: 666.0
Denarius: 1297.0
Quinarius: 2516.0
Sestertius: 4729.0
Dupondius: 8351.0
As: 13081.0
Semis: 16702.0
Quadrans: 18920.0
Share
Improve this question
edited Feb 7 at 23:46
Barmar
781k56 gold badges545 silver badges659 bronze badges
asked Feb 7 at 22:59
Inshaal811Inshaal811
171 silver badge4 bronze badges
2
|
2 Answers
Reset to default 0The example output does not make much sense, but I believe it is supposed to be :
Enter Number of Quadrans: 21432
Aureus: 13
Gold Quinarius: 0
Antoninianus: 4
Denarius: 1
Quinarius: 1
Sestertius: 1
Dupondius: 1
As: 0
Semis: 0
Quadrans: 0
Which I successfully outputted with the below snippet:
accountBalance = int(input("Enter Number of Quadrans: "))
# Define each coin in terms of Quadrans (integer values)
aureus = 1600
gold_quinarius = 800
antoninianus = 128
denarius = 64
quinarius = 32
sestertius = 16
dupondius = 8
as_coin = 4
semis = 2
quadrans_coin = 1
# Calculate the number of each coin starting from the largest
aureus_p = accountBalance // aureus
accountBalance %= aureus
gold_quinarius_p = accountBalance // gold_quinarius
accountBalance %= gold_quinarius
antoninianus_p = accountBalance // antoninianus
accountBalance %= antoninianus
denarius_p = accountBalance // denarius
accountBalance %= denarius
quinarius_p = accountBalance // quinarius
accountBalance %= quinarius
sestertius_p = accountBalance // sestertius
accountBalance %= sestertius
dupondius_p = accountBalance // dupondius
accountBalance %= dupondius
as_p = accountBalance // as_coin
accountBalance %= as_coin
semis_p = accountBalance // semis
accountBalance %= semis
quadrans_p = accountBalance // quadrans_coin
# Print the results
print("Aureus: ", aureus_p)
print("Gold Quinarius: ", gold_quinarius_p)
print("Antoninianus: ", antoninianus_p)
print("Denarius: ", denarius_p)
print("Quinarius: ", quinarius_p)
print("Sestertius: ", sestertius_p)
print("Dupondius: ", dupondius_p)
print("As: ", as_p)
print("Semis: ", semis_p)
print("Quadrans: ", quadrans_p)
So just for clarification, this was one of the questions asked in one of my college classes which I couldn't figure out at first, as some people were confused if the example output made sense or not.
Anyways, I managed to figure out the logic behind this and the following is the correct and approved code:
import math
As = 4
Semis = 0.5 * As
Quadrans = 0.5 * Semis
Dupondius = 2 * As
Sestertius = 2 * Dupondius
Quinarius = 2 * Sestertius
Denarius = 2 * Quinarius
Antoninianus = 2 * Denarius
GoldQuinarius = 25 * Quinarius
Aureus = 25 * Denarius
accountBalance = int(input( "Enter Number of Quadrans: " ))
AureusP = math.floor(accountBalance / Aureus)
accountBalance %= Aureus
GoldQuinariusP = math.floor(accountBalance / GoldQuinarius)
accountBalance %= GoldQuinarius
AntoninianusP = math.floor(accountBalance / Antoninianus)
accountBalance %= Antoninianus
DenariusP = math.floor(accountBalance / Denarius)
accountBalance %= Denarius
QuinariusP = math.floor(accountBalance / Quinarius)
accountBalance %= Quinarius
SestertiusP = math.floor(accountBalance / Sestertius)
accountBalance %= Sestertius
DupondiusP = math.floor(accountBalance / Dupondius)
accountBalance %= Dupondius
AsP = math.floor(accountBalance / As)
accountBalance %= As
SemisP = math.floor(accountBalance / Semis)
accountBalance %= Semis
QuadransP = math.floor(accountBalance / Quadrans)
print("Aureus: ",AureusP)
print("Gold Quinarius: ", GoldQuinariusP)
print("Antoninianus: ", AntoninianusP)
print("Denarius: ", DenariusP)
print("Quinarius: ", QuinariusP)
print("Sestertius: ", SestertiusP)
print("Dupondius: ", DupondiusP)
print("As: ", AsP)
print("Semis: ", SemisP)
print("Quadrans: ", QuadransP)
The logic was using the floor method to get the rounded down values for each coin value instead of rounding it up. Using the modulo operator to get the remainder of the account balance after devision with the corresponding coin value and proceeding further with every coin in a descending order.
Enter Number of Quadrans
. – Barmar Commented Feb 7 at 23:48