SCP 模拟 · SCP 2021 第一轮(初赛)模拟 第 18 题

阅读程序 · 答案 ABC

← 整套速查表 SCP 模拟 全部真题

题目

#include <bits/stdc++.h>
using namespace std;

#define N 105
#define INF 1e9

int dis1[N][N], dis2[N][N];
int mp[N][N], n, m;

void fun1(int dis[N][N]) {
  static bool vis[N];
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      dis[i][j] = mp[i][j];
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) vis[j] = 0;
    for (int k = 1; k <= n; k++) {
      int now = 0;
      for (int j = 1; j <= n; j++) {
        if (!vis[j] && (!now || dis[i][now] > dis[i][j]))
          now = j;
      }
      vis[now] = 1;
      for (int j = 1; j <= n; j++) {
        if(!vis[j]&&dis[i][j] > dis[i][now]+mp[now][j]){
          dis[i][j] = dis[i][now] + mp[now][j];
        }
      }
    }
  }
}
void fun2(int dis[N][N]) {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      dis[i][j] = mp[i][j];
    }
  }
  for (int i = 1; i <= n; i++) {

(本题为阅读程序 / 完善程序,完整题目与测试数据见平台)
答案:ABC

解题思维

本题考查程序阅读与C++基础语法,需要模拟程序执行过程,跟踪变量值的变化。

常见错误

常见误区:忽略变量的初始值,循环次数计算错误,运算符优先级搞错,数据类型转换不留意。

详细解析(节选)

核心概念:程序执行的基本单位是语句,按顺序执行。变量在内存中存储值,赋值操作改变变量的值。

推导分析:逐行模拟,用表格记录每个变量的值变化;注意++i(先加后用)和i++(先用后加)的区别;整数除法会截断小数部分。

避坑指南:循环终止条件影响执行次数;未初始化的变量值不确定。

解题技巧:遇到程序阅读题时,在草稿纸上建立变量跟踪表,逐行记录变量变化。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断