华为招聘机试整理3:数组比较

华为招聘机试整理3:数组比较

题目:数组比较
题目描述:
比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数
比如:
数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0
数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3
要求实现函数:
int array_compare(int len1, int array1[], int len2, int array2[])
【输入】 int len1:输入被比较数组1的元素个数;
int array1[]:输入被比较数组1;
int len2:输入被比较数组2的元素个数;
int array2[]:输入被比较数组2;
【输出】 无
【返回】 不相等元素的个数,类型为int
示例
1) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5
函数返回:0
2) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6
函数返回:3

题目分析:
这道题其实很简单,就是要逐个比较题,由于我们不知道哪个数组长,所以我们先判断谁长,所以我们先进行比较,之后返回,这样做的目的就是保证array1[]比较短,方便我们写循环。

===========================================================================
参考代码:

//数组比较.cpp
//2014.7.9 hepanhui
#include <iostream>
#include <string>
const int maxn = 1000;
using namespace std;

int array_compare(int len1, int array1[], int len2, int array2[])
{
    int i,j, cnt = 0;

    if(len1 > len2)
        return array_compare(len2,array2,len1,array1);

    for(i = len1-1, j = len2-1; i >= 0; i--,j--)
    {
        if(array1[i] != array2[j])
            cnt++;
    }
    return cnt;
}

int main()
{
    int len1,len2;
    int array1[maxn];
    int array2[maxn];
    cin >> len1;
    for(int i = 0; i < len1; i++)
        cin >> array1[i];

    cin >> len2;
    for(int j = 0; j < len2; j++)
        cin >> array2[j];

    cout << array_compare(len1,array1,len2,array2) << endl;
    return 0;
}

调试中易犯的错误:
①对于数组倒序排列的时候一定要注意这样for(int i = len-1; i >= 0; i++)不要思维定式for(int i = 0; i < len; i++)不能少了=号,而且注意是i--;
②整型数组输入的时候,我们一定要注意不能cin >> array;这种方法只能用于字符串数组输入,我们要用for循环来输入。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值