检查C中的数组是否对称 [英] Checking if an array in C is symmetric

查看:106
本文介绍了检查C中的数组是否对称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究一个示例问题,它要求我检查用户输入的数组是否对称。我已经找到了解决方法,方法是创建另一个数组,以相反的顺序复制第一个数组,然后检查它们是否相等。如以下代码所示。

I'm working on an example problem and its asking me to check of a user inputted array is symmetric. I've figured out how to do it by creating another array, copying over the first array in reverse order then checking to see if they are equal to each other. As seen in the following code.

#include <stdio.h>

int main(void){

#define NUM_ELEMENTS 12
int userArray[NUM_ELEMENTS];
int userArray2[NUM_ELEMENTS];
int i;
int tempVal = 0;
double sumArray = 0;
double aveArray = 0;


printf("Enter 12 interger numbers (each one separated by a space):\n");
for(i = 0; i < NUM_ELEMENTS; i++){
    scanf_s("%d", &userArray[i]);
}

for(i = 0; i < NUM_ELEMENTS; i++){
    sumArray = sumArray + userArray[i];
}

aveArray = sumArray/NUM_ELEMENTS;

printf("\nAverage of all data points is %.2lf \n",aveArray);
printf("\nAn array in reverse order:\n");

for(i = NUM_ELEMENTS - 1; i >= 0; i--){
    printf("%d ",userArray[i]);
}
printf("\n");

//Used swap values in the array
for(i = 0; i < (NUM_ELEMENTS / 2); i++){
    tempVal = userArray[i];
    userArray2[i] = userArray[NUM_ELEMENTS - 1- i];
    userArray2[NUM_ELEMENTS - 1 - i] = tempVal;
}
if(userArray[i] == userArray2[i])
    printf("\nThis array is symmetric\n");
else
    printf("\nThis array is NOT symmetric\n");

    return 0;
}

因此,如果用户输入了1 2 3 4 5 6 6 5 4 3 2 1程序返回数组是对称的。

So if a user entered 1 2 3 4 5 6 6 5 4 3 2 1 the program return back that the array is symmetric.

我只是好奇是否有一种更简单的方法?

I'm just curious if there is a simpler way to do this?

推荐答案

只需同时迭代向前和向后:

Just iterate forwards and backwards at the same time:

// i iterates forwards from the start
// j iterates backwards from the end
// once they pass each other, we're done.
for (int i = 0, j = NUM_ELEMENTS - 1; i < j; i++, j--) {
    if (userArray[i] != userArray[j]) {
        printf("\nThis array is not symmetric\n");
        return 0;  // No point in running this function any longer at this point.
    }
}

// If the function didn't return in the for loop, the array is symmetrical.
printf("\nThis array is symmetric\n");

这篇关于检查C中的数组是否对称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆