Javascript 将一个数转换为另外两个数的和,使差值最小
在火星上,只有两种面额的货币,x和y。A. Marsian去了一家酒吧,账单上写着“z”。用x和y他必须付钱 法案。但是酒吧不提供零钱,任何额外的钱都会被扣除 作为提示 因此,用JavaScript编写一个函数,帮助marsian减少 提示 该函数接受x、y、z并返回他必须支付的小费金额 付钱 例1 输入:2,5109 输出:0 说明:21枚5枚硬币和2枚2枚硬币 例2 输入:5,7,43 输出:0 说明:7枚硬币中有4枚,5枚硬币中有3枚 例3 输入:15、19、33 产出:1 说明:1枚15分硬币和1枚19分硬币 解决方案:我认为这是一级DP问题,类似于子集和。就像为较大的数字找到最佳提示一样,了解以下所有数字的最佳提示将有所帮助Javascript 将一个数转换为另外两个数的和,使差值最小,javascript,algorithm,Javascript,Algorithm,在火星上,只有两种面额的货币,x和y。A. Marsian去了一家酒吧,账单上写着“z”。用x和y他必须付钱 法案。但是酒吧不提供零钱,任何额外的钱都会被扣除 作为提示 因此,用JavaScript编写一个函数,帮助marsian减少 提示 该函数接受x、y、z并返回他必须支付的小费金额 付钱 例1 输入:2,5109 输出:0 说明:21枚5枚硬币和2枚2枚硬币 例2 输入:5,7,43 输出:0 说明:7枚硬币中有4枚,5枚硬币中有3枚 例3 输入:15、19、33 产出:1 说明:1枚15
const coinA = 2
const coinB = 5
const sum = 13
var arr = [];
arr[0] =0;
console.log(getMyTip(coinA, coinB, sum));
function getMyTip(){
for(var i=1; i<= sum; i++){
var minA, minB;
if( i < coinA){
minA = coinA - i;
}else{
minA = arr[i - coinA];
}
if( i < coinB){
minB = coinB - i;
}else{
minB = arr [i - coinB]
}
arr[i] = Math.min(minA, minB);
}
return arr[sum];
}
const coinA=2
常数b=5
常数和=13
var-arr=[];
arr[0]=0;
log(getMyTip(coinA,coinB,sum));
函数getMyTip(){
对于(var i=1;i而言,它与a.x+b.y=z有更密切的关系吗?如果z是x和y的最大公约数(称为gcd)的倍数,答案是肯定的。如果不是,你的提示将是1.可被gcd整除的较小数字与大于z的数字之间的差
和2.z。
一旦您知道了提示的值,您甚至可以通过稍微将z的值修改为(z+tip)来轻松地知道所需的x和y的数量
int main()
{
国际货币1、2、票据;
scanf(“%d%d%d”、&curr1、&curr2、&bill);
int gcd,tip=0;
int x=curr1;
int y=curr2;
while(x!=y)
{
如果(x>y)
x-=y;
其他的
y-=x;
}
gcd=x;
如果((票据%curr1==0)| |(票据%curr2==0)| |(票据%(curr1+curr2)==0)){
tip=0;
}否则,如果(票据>(当前1+当前2)和&(票据%gcd==0)){
tip=0;
}如果((当前1+当前2)>账单){
如果(curr2>curr1){
小费=(账单%(当前2-当前1));
}否则{
小费=(账单%(curr1-curr2));
}
}
printf(“%d”,提示);
返回0;
}
这不需要使用dp。下面是一个简单的解决方案-
// x -> first currency denomination
// y -> second currency denomination
// z -> total bill
var calculateTip = function(x,y,z) {
var xMax = Math.floor(z/x);
var tip = y;
if(xMax == 0) {
tip = (x-z) < (Math.ceil(z/y)*y - z) ? (x-z) : (Math.ceil(z/y)*y - z);
}
while (xMax>=0) {
var tempTip = xMax*x + Math.ceil((z-xMax*x)/y)*y - z;
if(tempTip < tip) {
tip = tempTip;
}
xMax--;
}
return tip;
}
var minimumTip = function(x,y,z) {
if(x>y) {
return calculateTip(x,y,z);
} else {
return calculateTip(y,x,z);
}
}
console.log(minimumTip(2, 5, 109));
/x->第一种货币面额
//y->第二种货币面额
//z->总账单
var CalculateIP=函数(x,y,z){
var xMax=数学楼层(z/x);
var-tip=y;
如果(xMax==0){
提示=(x-z)<(数学单元(z/y)*y-z)?(x-z):(数学单元(z/y)*y-z);
}
而(xMax>=0){
var TENTIP=xMax*x+Math.ceil((z-xMax*x)/y)*y-z;
如果(IPy){
返回计算IP(x,y,z);
}否则{
返回计算IP(y,x,z);
}
}
控制台日志(最小提示(2,5,109));
var findTip=函数(x=2,y=5,z=13){
var x=x;
变量y=y;
var z=z;
var-tip;
var-temp1=x;
var temp2=y
函数findNumber(num,total){
如果(数量>总数){
返回总数;
}
否则{
var q=数学楼层(总计/数量);
返回((q+1)*num)-总计;
}
}
函数findMin(a,b,c){
var-min;
如果(Ayple函数不使用参数化这个JavaScript?也许你应该考虑添加解释……)
// x -> first currency denomination
// y -> second currency denomination
// z -> total bill
var calculateTip = function(x,y,z) {
var xMax = Math.floor(z/x);
var tip = y;
if(xMax == 0) {
tip = (x-z) < (Math.ceil(z/y)*y - z) ? (x-z) : (Math.ceil(z/y)*y - z);
}
while (xMax>=0) {
var tempTip = xMax*x + Math.ceil((z-xMax*x)/y)*y - z;
if(tempTip < tip) {
tip = tempTip;
}
xMax--;
}
return tip;
}
var minimumTip = function(x,y,z) {
if(x>y) {
return calculateTip(x,y,z);
} else {
return calculateTip(y,x,z);
}
}
console.log(minimumTip(2, 5, 109));
var findTip = function(x=2, y=5, z=13){
var x = x;
var y = y;
var z = z;
var tip ;
var temp1 = x;
var temp2 = y
function findNumber(num,total){
if(num > total){
return num-total;
}
else{
var q = Math.floor(total/num);
return ((q+1)*num)-total;
}
}
function findMin(a,b,c){
var min ;
if(a<b && a<c){
min = a
}else{
if(b<c){
min = b;
}else{
min = c;
}
}
return min;
}
while(temp1!=temp2)
{
if(temp1 > temp2)
temp1 -= temp2;
else
temp2 -= temp1;
}
var factor =temp1;
if(z%x == 0 || z%y == 0 || z%(x+y) == 0) {
tip = 0;
}else if(z%factor == 0 && z>=x*y - x -y){
tip = 0;
}
else {
var minX= findNumber(x,z);
var minY = findNumber(y,z);
var minXY = findNumber(x+y,z);
console.log(minX,minY,minXY)
tip = findMin(minX,minY,minXY);
}
alert('the tip is '+ tip.toString());
return tip;
}
findTip(21, 11, 109);