从下面一个列表 `(x, y)` 构造一个函数 `y = f(x)`

发布于 2022-09-06 02:39:48 字数 635 浏览 8 评论 0

clipboard.png

利用一个数组和一个字符串:

  1. [1, 5, 10, 50, 100, 500, 1000]
  2. 'IVXLCDM'

构造一个函数f, 使得(参考上图):

  • f(1); // 'I'
  • f(2); // 'II'
  • // ...
  • f(6); // 'VI'
  • f(7); // 'VII'
  • // ...
  • f(800); // 'DCCC'
  • f(900); // 'CM'

有没有更简单的构造法... ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柳若烟 2022-09-13 02:39:48
function num2roman(nVal,nMode )
{
    var pChars = ['M','D','C','L','X','V','I'];
    var pValues = [1000,500,100,50,10,5,1];
    var nMaxIndex = pValues.length-1;
    var aRoman = "";
    for(var i=0 ; i<= Math.floor( nMaxIndex/2 ); i++)
    {
            var nIndex = 2 * i;
            var nDigit = Math.floor( nVal/pValues[nIndex] );
            if((nDigit%5)==4)
            {
                var nIndex2 = (nDigit == 4) ? nIndex - 1 : nIndex - 2;
                var nSteps = 0;
                while( (nSteps < nMode) && (nIndex < nMaxIndex) )
                {
                    nSteps++;
                    if( pValues[ nIndex2 ] - pValues[ nIndex + 1 ] <= nVal )
                        nIndex++;
                    else
                        nSteps = nMode;
                }
                aRoman += pChars[ nIndex ];
                aRoman += pChars[ nIndex2 ];
                nVal = nVal + pValues[ nIndex ];
                nVal = nVal - pValues[ nIndex2 ];
            }
            else
            {
                if( nDigit > 4 )
                    aRoman += pChars[ nIndex - 1 ];
                for(var j=0 ; j<(nDigit % 5) ; j++)
                    aRoman += pChars[ nIndex ];
                nVal %= pValues[ nIndex ];
            }
    }
    return aRoman;
}

网上找的 已验证

傻比既视感 2022-09-13 02:39:48

非常感谢 @czl 的回答。我自己也想到一个完全符合题意的算法:

const f = (num) => {
  const Y = 'IVXLCDM';
  const X = [1, 5, 10, 50, 100, 500, 1000];
  const i = X.findIndex(value => value >= num);
  if (X[i] === num) return Y.charAt(i);
  const p = i - 2 + i % 2;
  if (X[i] - X[p] === num) {
    return Y.charAt(p) + Y.charAt(i);
  }
  let result = i % 2 ? '' : Y.charAt(i - 1);
  if (result) num -= X[i - 1];
  while (num > 0) {
    result += Y.charAt(p);
    num -= X[p];
  }
  return result;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文