| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13237 人关注过本帖
标题:请教两个数组比较的问题
只看楼主 加入收藏
bleach100
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-3-13
收藏
 问题点数:0 回复次数:22 
请教两个数组比较的问题
比如a[]={1,2,3},b[]={3,2,1}哪么就认为他俩是相等的
而如过a[]={1,2,3},b[]={1,2,1}则不是。。。。
希望有代码
谢谢
补充一点:我的意思不是数组长度,而是元素的比较。即两个数组如果元素相同即说明相等(但不能重复)。

[[it] 本帖最后由 bleach100 于 2008-3-29 22:07 编辑 [/it]]
搜索更多相关主题的帖子: 数组 元素 相等 长度 
2008-03-29 21:15
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
我的理解是这样的,希望也是你所要求的
程序代码:
#include <stdio.h>
#include<stdlib.h>
int main() 
{ 
        char  i,j;
        int k,l;
        gets(i);
        gets(j);
        k=strlen(i);
        l=strlen(j);
        if(k==l)
                printf("长度一样");
        if(k>l)
                printf("i大");
        if(k<l)
                printf("j大");


        getch();
} 

}


[[it] 本帖最后由 广陵绝唱 于 2008-3-29 21:33 编辑 [/it]]
2008-03-29 21:28
bleach100
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-3-13
收藏
得分:0 
不是这样的
2008-03-29 21:56
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
分别排个序,按位比较

Fight  to win  or  die...
2008-03-30 00:29
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
如果对空间没有限制的话直接遍历数组记录数组中各元素出现的个数更快一些。。。

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2008-03-30 00:50
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
我在别的地方见到过这个问题。两个数组排序好之后,逐个比较。时间O(n log n)。
如果想更快,可以用散列表(Hash Table),存值 + 在两个数组的出现个数,这样的时间约等于O(n),但是空间需求将浪费些,编码将变得更复杂些。

[[it] 本帖最后由 hoodlum1980 于 2008-3-30 02:43 编辑 [/it]]
2008-03-30 02:40
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
你一定可以想出来
休力活

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-03-30 04:33
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
闲着没事,我也写了一个。
没怎么测试,有BUG的话请跟帖。
程序代码:
/*
  Name: 
  Copyright: 
  Author: suixin
  Date: 30-03-08 08:29
  Description: 
*/

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

// 去除重复 
int DelDup(int a[], int iSize)
{
    int iDelCount = 0;
    for (int ps=0; ps<iSize; ps++)
    {
        if (a[ps] != a[ps+1])
        {
            a[ps-iDelCount] = a[ps];
        }
        else 
        {
            iDelCount++;
        }
    }
    return iDelCount;
}


// 在一个数组中是否有目标元素 
int FindElem(int iSource[], int iSourceCount, int iAim)
{
    for (int ps=0; ps<iSourceCount; ps++)
    {
        if (iSource[ps] == iAim)    // 是要找的数
        {
            return 1;
        } 
    }
    return 0;
}


// 检测两个数组是否"相同" 
int CheckSame(int a[], int b[], int iaSize, int ibSize)
{
    int iaCount = 0, ibCount = 0;
    for (int ps=0; ps<iaSize; ps++)
    {
            if (FindElem(b, ibSize, a[ps])) // 在b里面找a的元素 
            {
                iaCount++;       // a里面的元素 b里面都有 
            }
    }
    for (int pos=0; pos<ibSize; pos++)
    {
            if (FindElem(a, iaSize, b[pos])) 
            {
                ibCount++;      
            }
    }
    
    if ((iaCount==iaSize) && (ibCount==ibSize))
    {
        return 1;
    } 
    return 0;
}

int main(void)
{
    int a[]={1,2,3,3,1}, b[]={3,2,1,2,1,3,2,};
    int iaSize = sizeof(a)/sizeof(int);    // C++里,这里应该加上const
    int ibSize = sizeof(b)/sizeof(int);
    
    if (DelDup(a,iaSize) > iaSize)
    {
        return -1;
    }
    if (DelDup(b,ibSize) > ibSize)
    {
        return -1;
    }
    
    if (CheckSame(a,b,iaSize,ibSize))
    {
        puts("相同"); 
    }
    else
    {
        puts("不相同"); 
    }
    
    system("pause");
    return 0;
}


[[it] 本帖最后由 随心 于 2008-3-30 09:12 编辑 [/it]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-03-30 08:35
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
忘了一件事了,保存的时候要保存为.cpp格式
写C++写惯了。如果保存为.c格式,DEV-CPP下就会不通过

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-03-30 08:52
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
又发了一个版本,内容和前面是一样的,只是在风格上不同
目的是想让大家来评一下倒底哪种风格可读性更好一些,哪种风格看上去更舒服一些
程序代码:
/*
  Name: 
  Copyright: 
  Author: suixin
  Date: 30-03-08 08:29
  Description: 
*/

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

// 去除重复 
int DelDup(int a[], int iSize)
{
    int iDelCount = 0;
    for (int ps=0; ps<iSize; ps++)
        if (a[ps] != a[ps+1])
            a[ps-iDelCount] = a[ps];
        else 
            iDelCount++;

    return iDelCount;
}


// 在一个数组中是否有目标元素 
int FindElem(int iSource[], int iSourceCount, int iAim)
{
    for (int ps=0; ps<iSourceCount; ps++)
        if (iSource[ps] == iAim)    // 是要找的数
            return 1;

    return 0;
}


// 检测两个数组是否"相同" 
int CheckSame(int a[], int b[], int iaSize, int ibSize)
{
    int iaCount = 0, ibCount = 0;
    for (int ps=0; ps<iaSize; ps++)
        if (FindElem(b, ibSize, a[ps])) // 在b里面找a的元素 
            iaCount++;       // a里面的元素 b里面都有 

    for (int pos=0; pos<ibSize; pos++)
        if (FindElem(a, iaSize, b[pos])) 
            ibCount++;      
    
    if ((iaCount==iaSize) && (ibCount==ibSize))
        return 1;
        
    return 0;
}

int main(void)
{
    int a[]={1,2,3,3,1}, b[]={3,2,1,2,1,3,2,};
    int iaSize = sizeof(a)/sizeof(int);
    int ibSize = sizeof(b)/sizeof(int);
    
    if (DelDup(a,iaSize) > iaSize)
        return -1;
    if (DelDup(b,ibSize) > ibSize)
        return -1;
    
    if (CheckSame(a,b,iaSize,ibSize))
        puts("相同"); 
    else
        puts("不相同"); 
    
    system("pause");
    return 0;
}


[[it] 本帖最后由 随心 于 2008-3-30 09:11 编辑 [/it]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-03-30 09:07
快速回复:请教两个数组比较的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016666 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved