首页 > 试题广场 >

#include int n, d[100]...

[填空题]
#include <cstdio>
int n, d[100];
bool v[100];
int main( ) {
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", d + i);
        v[i] = false;
    }
    int cnt = 0;
    for (int i = 0; i < n; ++i) {
        if (!v[i]) {
            for (int j = i; !v[j]; j = d[j]) {
                v[j] = true;
            }
            ++cnt;
        }
    }
    printf("%d\n", cnt);
    return 0;
}

输入:10 7 1 4 3 2 5 9 8 0 6
输出:1
这里有两个数列,一个数列n是7 1 4 3 2 5 9 8 0 6,另一个数列v是10个0.

根据n的指标把v改成1,遇到已经改过的就重新看下一个。

第一趟把0,7,8改了,(即v[0],v[7],v[8])
第三趟把2,4改了。
最后一趟改了6,9
别的一次只改一个。
一共六趟,所以应该是6.
发表于 2019-06-06 21:25:27 回复(0)