问题描述:从一系列输入的数中找某数出现的次数,输入是一系列数和要查找的数,输出是次数。
这个问题是坐火车的时候群里一位朋友的问的,还要求用C++实现,结果他们学的是C式的C++,于是想用纯的C++解决一下这个问题。因为在火车上,只能用手机编程,高铁跑出100公里我还没敲完,下车了。回来又继续写,发现之前写的还是错的,折腾了一个对的版本。
C++ (C++11)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream> #include <vector> #include <algorithm>
int main(void) { std::vector <int> v; int find = 0; int input = 0; std::cout << "Input numbers, enter -1 to end:" << std::endl; while (std::cin >> input && input != -1) { v.push_back(input); } std::cout << "Find: "; std::cin >> find; auto found = std::count(v.begin(), v.end(), find); std::cout << "Found " << found << " times." << std::endl; return found; }
|
或者还有一种简单的实现方法,不用-1
结束输入,而是用EOF
(*nix世界用Ctrl+D
,Windows用Ctrl+Z
后回车)结束输入,然后cin.clear()
,继续写后面的就行。但这种写法在手机上和Windows的MSYS2环境里都出错。
上面的代码可以在手机上编译运行,安卓手机装Termux后再装Clang就好。话说Clang不是效率高么,这么个破代码编译要好几秒,Termux里压根没GCC,唉。
这个代码用了自动类型(其实就一个int
),所以必须C++11以上才行。
Node.js
现在(Node.js 10.5.0)已经支持原生大数(BigInt)了,我觉得Node.js有可能变成一种可以用于ACM的语言,而且Node.js不用编译,跨平台还高效。这个题其实也是ACM题,只不过是最容易的那种。
花了一点时间边查边写,写出来了,这个输入输出真别扭啊。这个代码和上面的代码一样,用了比较新的技术,必须比较高的版本才能运行,对于自娱自乐来说很合适。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 'use strict';
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
let v = [];
console.log('Input numbers, -1 to end:');
rl.on('line', (line) => { if (line === '-1') { console.log('Done.'); rl.question('Find? ', (find) => { console.log('Found ' + v.filter((e) => { return e === parseInt(find, 10); }).length + ' times.'); rl.close(); }); } let num = parseInt(line, 10); if (num.isNaN) rl.close(); v.push(num); }).on('close', () => { process.exit(0); });
|
应该很容易改成支持大数的版本。
试了一下,随便输入一个很大的数,上面的代码是可以正常工作的,但好像并不是因为用了大数而是转成了浮点数?我也不知道。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 'use strict';
const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
let v = [];
console.log('Input numbers, -1 to end:');
rl.on('line', (line) => { if (line === '-1') { console.log('Done.'); rl.question('Find? ', (find) => { try { const t = BigInt(find); console.log('Found ' + v.filter((e) => { return e === t; }).length + ' times.'); } catch (err) { console.error(err); process.exit(-1); } rl.close(); }); } try { const num = BigInt(line); if (num != line) rl.close(); v.push(num); } catch (err) { console.error(err); process.exit(-1); } }).on('close', () => { process.exit(0); });
|
WDYT?
本文标题:多语言(C++, NodeJS)实现统计输入某数的次数
文章作者:Chris
发布时间:2018-06-25
最后更新:2022-03-23
原始链接:https://chriszheng.science/2018/06/25/Multi-languages-count-occurrences/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!