万卷网 > 题目详情
题型:组合题

(魔法数字)小 H 的魔法数字是 4。给定n,他希望用若干个 4 进行若干次加法、减法和整除运算得到 n。但由于小 H 计算能力有限,计算过程中只能出现不超过M = 10000 的正整数。求至少可能用到多少个 4。

例如,当 n = 2 时,有 2 = (4 + 4)/4,用到了 3 个 4,是最优方案。

试补全程序。


#include <iostream>

#include <cstdlib>

#include <climits>


using namespace std;


const int M = 10000;

bool Vis[M + 1];

int F[M + 1];


void update(int &x, int y) {

if (y < x)

x = y;

}


int main() {

int n;

cin >> n;

for (int i = 0; i <= M; i++)

F[i] = INT_MAX;

①;

int r = 0;

while (②) {

r++;

int x = 0;

for (int i = 1; i <= M; i++)

if (③)

x = i;

Vis[x] = 1;

for (int i = 1; i <= M; i++)

if (④) {

int t = F[i] + F[x];

if (i + x <= M)

update(F[i + x], t);

if (i != x)

update(F[abs(i - x)], t);

if (i % x == 0)

update(F[i / x], t);

if (x % i == 0)

update(F[x / i], t);

}

}

cout << F[n] << endl;

return 0;

}

(1).

③处应填( )

A.

F[i] == r

B.

!Vis[i] && F[i] == r

C.

F[i] < F[x]

D.

!Vis[i] && F[i] < F[x]

(2).

④处应填( )

A.

F[i] < F[x]

B.

F[i] <= r

C.

Vis[i]

D.

i <= x

(3).

②处应填( )

A.

!Vis[n]

B.

r < n

C.

F[M] == INT_MAX

D.

F[n] == INT_MAX

(4).

①处应填( )

A.

F[4] = 0

B.

F[1] = 4

C.

F[1] = 2

D.

F[4] = 1

更新时间:2022-12-06 18:49:58 |
【知识点】 CCF非专业级别软件能力认证CSP-S/提高级

相似题推荐

简答题

T4员工招聘

2026-04-17
简答题

T1社团招新

2026-04-17
简答题

T2道路修复

2026-04-17
简答题

T3谐音替换

2026-04-16
单选题

对一个大小为16(下标0-15)的数组构建满线段树,查询区间[3,11]时,最少需要访问多少个树结点(包括路径上的父结点和完全包含在查询区间内的结点)?

A.

7

B.

8

C.

9

D.

10

2025-10-17
公众号
客服 反馈
顶部