运行平台
Algorithm Visualizer
选数
[NOIP2002 普及组] 选数
const {
Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer');
const N = 4, K = 3;
let ans = 0
const board =[3, 7, 12, 19];
const chosen = [-1, -1, -1, -1];
const boardTracer = new Array1DTracer('集合');
const chosenTracer = new Array1DTracer('选中元素');
const logger = new LogTracer('枚举过程');
Layout.setRoot(new VerticalLayout([boardTracer, chosenTracer, logger ]));
boardTracer.set(board);
chosenTracer.set(chosen);
logger.println(`选数: 从${
N}个元素中选出${
K}个元素`);
Tracer.delay();
function validState(sum) {
if(sum <= 1) return false;
for (let i = 2; i <= sum / i; i ++)
if(sum % i === 0) return false;
return true;
}
function dfs(t, last, sum) {
if (t >= K) {
let res = validState(sum)
if(res) ans ++;
logger.println(`所选${
K}个数的和为${
sum}`);
if(res) logger.println(`${
sum}是质数, 已找到${
ans}组方案`);
else logger.println(`${
sum}不是质数`);
logger.println('------------------------------------------------------------------');
return;
}
for(let i = last + 1; i < N; i ++) {
logger.println(`第${
t + 1}个数选择${
board[i]}`)