Processing math: 100%

三、完善程序

  1. 一、(大整数除法)给定两个正整数 和 ,其中  不超过 10^{100}, q 不超过 10, 求 除以  的商和余数。
    输入:第一行是 的位数 ,第二行是正整数 ,第三行是正整数
    输出:两行,分别是 除以  的商和余数。

     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
    #include <iostream>
    using namespace std;
    int p[100];
    int n, i, q, rest;
    char c;
    int main()
    {
        cin >> n;
        for (i = 0;
             i < n; i++)
        {
            cin >> c;
            p[i] = c - '0';
        }
        cin >> q;
        rest = (1);
        i = 1;
        while ((2) && i < n)
        {
            rest = rest * 10 + p[i];
            i++;
        }
        if (rest < q)
            cout << 0 << endl;
        else
        {
            cout << (3);
            while (i < n)
            {
                rest = (4);
                i++;
                cout << rest / q;
            }
            cout << endl;
        }
        cout << (5) << endl;
        return 0;
    }
    

    • 填空一: , 填空二: , 填空三:   填空四:    填空五:

  2. 二、(最长路径)给定一个有向无环图,每条边长度为,求图中的最长路径长度。
    输入:第一行是结点数 n (不超过 100)和边数 m,接下来 行,每行两个整数 ,表示从结点 到结点  有一条有向边。结点标号从  到 。 输出: 最长路径长度。
    提示:先进行拓扑排序,然后按照拓扑序计算最长路径。

     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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <iostream>
    using namespace std;
    int n, m, i, j, a, b, head, tail, ans;
    int graph[100][100]; // 用邻接矩阵存储图
    int degree[100];     // 记录每个结点的入度
    int len[100];        // 记录以各结点为终点的最长路径长度
    int queue[100];      // 存放拓扑排序结果
    int main()
    {
        cin >> n >> m;
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                graph[i][j] = 0;
        for (i = 0; i < n; i++)
            degree[i] = 0;
        for (i = 0; i < m; i++)
        {
            cin >> a >> b;
            graph[a][b] = 1;
            (1);
        }
        tail = 0;
        for (i = 0; i < n; i++)
            if ((2))
            {
                queue[tail] = i;
                tail++;
            }
        head = 0;
        while (tail < n - 1)
        {
            for (i = 0; i < n; i++)
                if (graph[queue[head]][i] == 1)
                {
                    (3);
                    if (degree[i] == 0)
                    {
                        queue[tail] = i;
                        tail++;
                    }
                }
            (4);
        }
        ans = 0;
        for (i = 0; i < n; i++)
        {
            a = queue[i];
            len[a] = 1;
            for (j = 0; j < n; j++)
                if (graph[j][a] == 1 && len[j] + 1 > len[a])
                    len[a] = len[j] + 1;
            if ((5))
                ans = len[a];
        }
        cout << ans << endl;
        return 0;
    }
    

    • 填空一:
      填空二:
      填空三:
      填空四:
      填空五: