只试了示例的数据,不知道其他的可不可以
#include<stdio.h>
int main() {
int n;
while ((scanf("%d", &n)) == 1) {
int a[n][n], s[n][n], b[n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (i == j)
a[i][j] = s[i][j] = i + 1;
else
a[i][j] = s[i][j] = 0;
for (int i = 0; i < n; i++)
scanf("%d", &b[i]);
int x = 0;
while (1) {
x++;
if (x >= n) {
printf("No solution!\n");
break;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
if (a[i][j] != 0)
s[b[i] - 1][j] = a[i][j];
}
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
a[i][j] = s[i][j];
int k;
for (k = 0; k < n; k++)
if (a[n - 1][k] != k + 1)
break;
if (k == n && x < n) {
printf("%d\n", x);
break;
}
}
}
return 0;
}
看铅笔部分
我们还没学二维数组,有别的方法吗,或者给个代码?谢谢回答
追答不用二维数组我也没什么办法,代码有点长,懒得写
追问一段也行,我真的不知道怎么写