zl程序教程

您现在的位置是:首页 >  其他

当前栏目

等价多米诺骨牌对的数量-c语言实现

语言 实现 数量 等价
2023-09-14 09:06:53 时间

等价多米诺骨牌对的数量

给你一个由一些多米诺骨牌组成的列表 dominoes。

如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。

形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 ac 且 bd,或是 ad 且 bc。

在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。

示例:

输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出:1

int f(int n){
    if(n==1) return 0;
    int i;
    int s=0;
    for(i=1;i<=n-1;i++){
        s=s+i;

    }
    return s;
}

int numEquivDominoPairs(int** dominoes, int dominoesSize, int* dominoesColSize){
    int  r[dominoesSize][2];
    int i,j;
    int p=1;
    int rs[dominoesSize];
   

    rs[0]=1;
    r[0][0]=dominoes[0][0];
    r[0][1]=dominoes[0][1];

    for(i=1;i<dominoesSize;i++){
        int l=0;
      //  printf("i %d %d  ",dominoes[i][0],dominoes[i][1]);
        for(j=0;j<p;j++){
       //        printf("j%d %d  ",r[j][0],r[j][1]);
      //   printf("rs[j]  %d  j  %d i %d ",rs[j],j,i);
            if(dominoes[i][0]==r[j][0]&&dominoes[i][1]==r[j][1]){
              
                rs[j]++;
                l=1;
                   break;
               
            }
             if(dominoes[i][1]==r[j][0]&&dominoes[i][0]==r[j][1]){
                 
                rs[j]++;
                l=1;
                 break;
               
            }
          
        }
        if(l==0){
            r[p][0]=dominoes[i][0];
            r[p][1]=dominoes[i][1];
            rs[p]=1;
            p++;

        }
        
    }

    int max=0;
    for(i=0;i<p;i++){
        printf("rs[j]  %d ",rs[i]);
        max=max+f(rs[i]);
    }
     
    return max;
 
}