最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - Cannot figure out a coin conversion problem within the specified limitations - Stack Overflow

programmeradmin2浏览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  

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
  • Study: blog.seancoughlin.me/… – PM 77-1 Commented Feb 7 at 23:28
  • Did you copy the example output correctly? It has some duplicated lines before the second Enter Number of Quadrans. – Barmar Commented Feb 7 at 23:48
Add a comment  | 

2 Answers 2

Reset to default 0

The 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.

发布评论

评论列表(0)

  1. 暂无评论