[答案] 数学 × 程式编写比赛 (第八回) – 4位数的电子显示器


这次比赛不难, 就是把一个4个数字的电子屏倒过来,

0159 [答案] 数学 × 程式编写比赛 (第八回) - 4位数的电子显示器 I.T. SteemIt 数学 程序设计

0159

就成这样:

6510 [答案] 数学 × 程式编写比赛 (第八回) - 4位数的电子显示器 I.T. SteemIt 数学 程序设计

6510

问题是我们需要多少块(每块倒着可以用)

首先, 写一个函数, 用于返回一个数字是否可以倒过来, 像7这种倒过来没有意义的就可以返回FALSE区分.

1
2
3
4
5
6
7
8
9
10
11
12
function getRevDig(x) {
    switch (x) {
        case 0: return 0;
        case 1: return 1;
        case 2: return 2;
        case 5: return 5;
        case 6: return 9;
        case 8: return 8;
        case 9: return 6;
        default: return false;
    }
}
function getRevDig(x) {
    switch (x) {
        case 0: return 0;
        case 1: return 1;
        case 2: return 2;
        case 5: return 5;
        case 6: return 9;
        case 8: return 8;
        case 9: return 6;
        default: return false;
    }
}

给定一个4位数, 计算倒过来的数字, 如果倒过来无意义, 返回FALSE.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getRev(x) {
    var a = x % 10;
    a = getRevDig(a);
    if (a === false) return false;
    var b = Math.floor(x / 10) % 10;
    b = getRevDig(b);
    if (b === false) return false;
    var c = Math.floor(x / 100) % 10;
    c = getRevDig(c);
    if (c === false) return false;  
    var d = Math.floor(x / 1000);
    d = getRevDig(d);
    if (d === false) return false;  
    return (a * 1000 + b * 100 + c * 10 + d);
}
function getRev(x) {
    var a = x % 10;
    a = getRevDig(a);
    if (a === false) return false;
    var b = Math.floor(x / 10) % 10;
    b = getRevDig(b);
    if (b === false) return false;
    var c = Math.floor(x / 100) % 10;
    c = getRevDig(c);
    if (c === false) return false;  
    var d = Math.floor(x / 1000);
    d = getRevDig(d);
    if (d === false) return false;  
    return (a * 1000 + b * 100 + c * 10 + d);
}

然后就是从0到9999, 每次检查是否已经出现了, 否则统计加1, 然后把倒过来的数字也标记上了.

1
2
3
4
5
6
7
8
9
10
11
12
13
var total = 0;
var a = {};
for (var i = 0; i <= 9999; ++i) {
    if (!(i in a)) {
        total ++;
        a[i] = 1;
        var x = getRev(i);
        if (x !== false) {
            a[x] = 1;
        }
    }
}
console.log(total);
var total = 0;
var a = {};
for (var i = 0; i <= 9999; ++i) {
    if (!(i in a)) {
        total ++;
        a[i] = 1;
        var x = getRev(i);
        if (x !== false) {
            a[x] = 1;
        }
    }
}
console.log(total);

这样就能打印出正确的答案了, 希望能获奖!

英文: [Answer] Mathematics × Programming Competition #8 – Four Digit Calculator

GD Star Rating
loading...
本文一共 162 个汉字, 你数一下对不对.
[答案] 数学 × 程式编写比赛 (第八回) – 4位数的电子显示器. (AMP 移动加速版本)
上一篇: 为了长远考虑, CN 低保银行降息计划
下一篇: SteemSQL 系列教程之 - 你的哪些好友已经好久没玩STEEM了?

扫描二维码,分享本文到微信朋友圈
dd31394ab89f7f27d84432336bf5df6d [答案] 数学 × 程式编写比赛 (第八回) - 4位数的电子显示器 I.T. SteemIt 数学 程序设计

评论