0

因此,我试图检查先前输入的数组是否以 1 的间隔增加,从数字 1 开始并以 n 结束(n 是数组大小)。

这是我到目前为止得到的:

    for (int i =0; i<n;i++){
                for (next=i;next<n;next++){
                    if(arr[i]+1 = arr[next]){
                        x = 1;  //ignore this, it relates to the rest of the code.
                    }
                    else{
                        printf ("\nThis is not a permutation.");
                        break;
                }
        }
}

现在,我的想法是这段代码会比较相邻的参数,如果后面的参数等于前面的+1,那么它显然是加1的。问题是,当它为假时,它不会打印“这不是一个排列,”并且不会打破循环。

任何帮助,将不胜感激。

此外,任何有关检查数组是否以数字 1 开头的见解都将不胜感激。

谢谢

4

4 回答 4

0

如果您需要检查一个序列是否在增加,为什么要将每个元素与其他元素进行比较?您应该只需要一个 for 循环:

for (i = 1; i < n; i++)
{
    if (arr[i - 1] + 1 == arr[i])
        ... // keep going
    else
        ... // not a permutation
}

基本上,您的代码所做的是检查第 i 个元素之后的每个元素是否都大于第 i 个元素。最终,这导致了一个不可能的情况(因为两个数字必须相等但必须同时相差一个)。

于 2013-08-02T21:26:02.800 回答
0

看起来像在这一行:

if(arr[i]+1 = arr[next]){

你打算比较:

if(arr[i]+1 == arr[next]){
于 2013-08-02T21:16:49.157 回答
0

你试过if(arr[i]+1 == arr[next])而不是if(arr[i]+1 = arr[next])??

于 2013-08-02T21:17:43.983 回答
0

听起来您想测试是否arr[0] == 1以及每个后续数组元素都1大于前一个元素。这与检查数组中的值不一样[1,2,3,...,n]吗?

for (int i = 0; i < n; ++n) {
    if (arr[i] != i + 1) {
        printf("\nThis is not a permutation.");
        break;
    }
}
于 2013-08-02T23:29:48.070 回答