阵列中彼此相邻的序号相等

时间:2016-03-08 14:18:08

标签: c arrays

free()

这可能很难理解,因为我不是母语为英语的人。 如果彼此相邻的数字相等,程序应该打印这些数字的序列号。

例如:

#include <stdio.h>

void main(){
    int i, j, n;
    int num[5];
    int serial;

    for(i=0; i<5; ++i){
        scanf("%d",&num[i]);
        if(num[i]==num[i-1])
            serial=i;
        else
            continue;
    }
    printf("Serial number of equal numbers next to each other:%d. %d.", serial-1, serial);
}

输入:5 5 5 5 5 输出:0。1. 2. 3. 4.

我做了一些更改,现在打印两个相同数字的序列。 I:1 2 2 3 4 - O:1。2。 但如果所有数字都相同呢?

3 个答案:

答案 0 :(得分:2)

// ...

    // deal with index 0
    if (num[0] == num[1]) printf("0. ");

    // deal with indexes 1 .. N - 2
    for (int k = 1; k < n - 1; k++) {
        if ((num[k - 1] == num[k]) || (num[k] == num[k + 1])) {
            printf("%d. ", k);
        }
    }

    // deal with index N - 1
    if (num[n - 2] == num[n - 1]) printf("%d. ", n - 1);

// ... possibly with a printf("\n"); somewhere

答案 1 :(得分:0)

你可以在不将数字存储在数组中的情况下解决这个问题,但是你必须在读取当前数字之前跟踪读取了多少相等的数字:

    #include <stdlib.h>
    #include <stdio.h>

    int main(void)
    {
        int i = 0;          // running index
        int prev = 0;       // previously read number
        int iprev = 0;      // start of range of equal numbers previously read
        int n;              // currently read number

        while (scanf("%d", &n) == 1) {
            if (n != prev) {
                if (i - iprev > 1) {
                    while (iprev < i) printf("%d\n", iprev++);
                }
                iprev = i;
                prev = n;
            }

            i++;
        }

        if (i - iprev > 1) {
            while (iprev < i) printf("%d\n", iprev++);
        }

        return 0;
    }

只有在读取终止当前数字范围的数字后,才会考虑相等数字的延伸。当所有数字都不同时,该范围的大小为1,我们不打印任何内容。如果范围大于1,则打印所有相关指数。

因为您在阅读完最后一个号码后没有注意到更改,所以必须在主循环后单独检查最后一个范围。

答案 2 :(得分:0)

如果您可以在数组的[0]元素中放置非数字字符,则不需要对第一个元素进行不同的测试

int main (void)
{
    /* non-numeric in position 0 of data array */
    char myList[] = {'.','1','2','2','3','4','4','4','5','6','6'};
    int listSz = strlen(myList) -1;
    int n;

    /* check everything except last */
    for (n = 1; n < listSz; n++) {
        if(( myList[n] == myList[n +1]) || ( myList[n] == myList[n -1] )) {
            printf("%d . ", n);
        }
    }

    /* check last */
    if( myList[listSz] == myList[listSz -1] ) {
            printf("%d", n);
    }
    printf("\n");
}

输出:2。 3。 5。 6。 7。 9。 10