首页 > 试题广场 >

#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)
统计数组中的闭环数量

给定10个数,按照题目中数字的排列顺序,一共存在6个闭环:

1、7-8-0-7

2、1-1

3、4-2-4

4、3-3

5、5-5

6、9-6-9



```python
'''
n = int(input("请输入总数:"))
'''

n = 10
d = [7,1,4,3,2,5,9,8,0,6]
v = [False] * n

'''
for i in range(n):
    d.append(int(input("请输入第{}个数字: ".format(i+1))))

print(d)
print(v)
'''

cnt = 0
for i in range(n):
    s_path = ""
    if (not v[i]):
        j=i
        s_path += str(d[j]) + " --> "
        while not v[j]:
            v[j] = True
            j = d[j]
            s_path += str(d[j]) 
            if not v[j]:
                s_path += " --> "

        print(s_path)
        cnt += 1
print("cnt: ", cnt)
```


发表于 2025-12-31 16:24:14 回复(0)