首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >算出变化

算出变化
EN

Code Golf用户
提问于 2011-02-07 08:06:05
回答 4查看 608关注 0票数 10

您正在为自动收银机编写程序。用户需要用最少的硬币来改变。编写一个程序,它需要一个金额(比如1.53美元),并给出美国面额的变化--在这种情况下:1 x 1美元纸币,1 x 50美分和3 x 1美分。最短的节目将是赢家。支持其他货币(即英国面额)和不寻常货币(1,2,3美分?)的奖金点。

你有这些美国面额:1美分,5美分,10美分,25美分,50美分,1美元(纸币或硬币),2美元,5美元,10美元。

你有这些英国面值:1便士,2便士,5便士,10便士,20便士,50便士,国标1,国标2,国标5(纸币或硬币),国标10。

EN

回答 4

Code Golf用户

发布于 2011-02-07 09:22:10

Mathematica: 110个字符

代码语言:javascript
运行
复制
Sort[IntegerPartitions[Rationalize@#,Infinity,{10,5,2,1,1/2,1/4,1/10,5/100,1/100}],
    Length@#1<Length@#2&][[1]]&  

用法

代码语言:javascript
运行
复制
%[0.98]  
{1/100, 1/100, 1/100, 1/10, 1/10, 1/4, 1/2}  

代码语言:javascript
运行
复制
Tally@Sort[IntegerPartitions[Rationalize@#,Infinity,
                             {10,5,2,1,1/2,1/4,1/10,5/100,1/100}],
     Length@#1<Length@#2&][[1]]&  

(多6字符)

代码语言:javascript
运行
复制
{{1/100, 3}, {1/10, 2}, {1/4, 1}, {1/2, 1}}

对于其他教派,只需更改理性主义表{10,.,5/100,1/100}

票数 2
EN

Code Golf用户

发布于 2011-02-07 18:55:50

D: 225个字符

代码语言:javascript
运行
复制
import std.algorithm,std.conv,std.stdio;void main(string[]args){auto m=args[1].findSplit(".");void p(T,S)(T t,T u,S s){foreach(v;[u,10,5,1]){writefln("%s %s%s",t/v,v,s);t-=(t/v)*v;}}p(to!int(m[0]),20,"");p(to!int(m[2]),25,"/100");}

更清楚:

代码语言:javascript
运行
复制
import std.algorithm,std.conv,std.stdio;

void main(string[] a)
{
    auto m = a[1].findSplit(".");

    void p(T, S)(T t, T u, S s)
    {
        foreach(v; [u, 10, 5, 1])
        {
            writefln("%s %s%s", t / v, v, s);
            t -= (t / v) * v;
        }
    }

    p(to!int(m[0]), 20, "");
    p(to!int(m[2]), 25, "/100");
}

只处理美元。将该值作为命令行上的浮点值(值必须为1美元以下的前导0)。不接受$作为值的一部分。将每种纸币/硬币的数量输出在一条单独的行上。例如,1.53的投入导致:

0 20

0 10

0 5

1 1

2 25/100

0 10/100

0 5/100

3 1/100

票数 2
EN

Code Golf用户

发布于 2017-06-16 00:41:24

Mathematica,51字节

代码语言:javascript
运行
复制
#~NumberDecompose~{10,5,2,1,.5,.25,.1,.05,.01}&

输入

1.53

输出

{0,0,0,1,1,0,0,0,3.}

Mathematica,82个字节--加上奖金--

代码语言:javascript
运行
复制
(s=#~NumberDecompose~#2;Row@Flatten@Table[Table[#2[[i]]"+",s[[i]]],{i,Length@s}])&

输入

37.6,{15,7,2.5,1,0.8,0.2,0.01}

输出

15 +15 +7 +0.2 +0.2 +0.2 +

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/647

复制
相关文章

相似问题

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