标题:想问个问题
只看楼主
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
结帖率:100%
 问题点数:0 回复次数:20 
想问个问题
是这样的:
有一个数组,里面放着四种模式的数字的组合(可以是其它的数字,但必须是那四种组合),
例如:2,2    3,3,3    1,2,3,    4,4,4,4
其中每个数字最多不能超过4个,只能有一对组合是相同的(如2,2)

问题:如何判断这个数组中有 两个相同的数字 的组合?(如:5,5)

程序框架可是下面这样:
#include <iostream>
using namespace std;

bool IsDing(int Pai[], int n)
{
    ...
}

int main()
{
    //例如这里要判断9,9这个组合是否存在
    int cpg[] = {1,2,3, 3,3,3, 9,9} //不仅仅是这些,还可以任意组合
    if (IsDing(cpg, sizeof(cpg)/sizeof(int))
        cout << "有" << endl;
    else
        cout << "没有" << endl;
    return 0;
}

谁来给指点下,我写了好几个,都不行,郁闷了好几天了。给个思路也可以。
搜索更多相关主题的帖子: int 数字 cpg bool std 
2008-02-26 18:33
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
得分:0 
普通的搜索查找

如果要效率且要找的数据比较多,可以考虑先nlogn排一下序

(我忙碌中偶尔查资料上线看一下,有其它问题请请教其他高手)

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-02-26 18:49
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
楼主说的不清楚

—>〉Sun〈<—
2008-02-26 18:52
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
排序我也想过,但那样会破坏原来的组合。比如:7,8,9    9,9 排序后就成了9,9,9 了
还有就是不可以用二维数组来做,这个本来是项目里的问题,用二维数组会破坏整体结构。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-26 18:55
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
这个问题是我从项目里抽象出来的,描述的可能不是很标准,有不明白的可以说一下。谢谢了。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-26 18:56
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
你只有一个组合啊,

即数组 cpg

—>〉Sun〈<—
2008-02-26 19:15
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include <iostream>
using namespace std;

bool IsDing(int *Pai, int n)
{
    int Judge[2][1000]={{-1},{1}};
    int *p1,*p2;
    int i=0;
    p1=p2=Pai;
    do
    {
        if(*p1==*(p2+1))
        {

              Judge[1][i]++;
              p2=p2+1;
        }
        else
        {
            Judge[0][i]=*p1;
            p1=p2+1;
            i++;
        }
    }while(p1!=Pai+n);
    for(int j=0;j<i;j++)
    printf("Judge[0][%d]=%d,Judge[1][%d]=%d\n,",j,Judge[0][j],j,Judge[1][j]);
    return 0;
}

int main(void)
{
    //例如这里要判断9,9这个组合是否存在
    int cpg[] = {1,2,3,3,3,3,9,9}; //不仅仅是这些,还可以任意组合
    if (IsDing(cpg, sizeof(cpg)/sizeof(int)))
  //      cout << "有" << endl;
 //   else
   //     cout << "没有" << endl;
    return 1;
}
我这个可以提取相临字符的个数.我没按照你的要求,你可以改一下...
2008-02-26 19:44
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
/*估计这个应是对的 */
#include "stdio.h"
#include<conio.h>
main()
{
    int a[] = {1,2,3,3,9,9,3,3};
    int b[30];
    int i,j,k=0,num=0,test=0;
    for(i=0;i<7;i++)
    {   for(j=1;j<8;j++)
            if(a[i]==a[j])
            {
                k++;
            }
           num++;
           b[num]=k;
           k=0;
           if(b[num]==2)
           {
               test=a[i];
               break;
           }
     }
     printf("num=%d test=%d",b[num]-1,test);
     getchar();
}
2008-02-26 20:23
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
/*
    如果数组中有2个连续的数字相同,并且下一个数字不同,则返回1,否则返回0。
    函数接受2个参数,第一个是数组的首地址,第二个是数组的大小
*/

int is_double(int * ar, int n)
{
    int i, temp, k;

    if(n < 2)
        return 0;
        
    temp = ar[0];
    i = k = 1;
    while(i < n)
    {
        if(temp == ar[i])
            k++;
        else if(k == 2)
            break;
            
        if(k > 2)
            k = 0;
            
        temp = ar[i];
        i++;
    }
   
    return ((k == 2) ? 1 : 0);
}

—>〉Sun〈<—
2008-02-26 20:30
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
我的已经把所有相临的字符的个数都统计下来了.这样比较直接
2008-02-26 20:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-201029-1-1.html




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

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