加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何有效地检测4个整数变量的对称性?

发布时间:2020-12-16 10:37:17 所属栏目:百科 来源:网络整理
导读:我想在4个整数变量i,j,k和l中找到对称性. 对称性是: 所有四个数字相等:XXXX, 三个数字相等:XXXY,XXYX,XYXX,YXXX 两对相等的数字:XXYY,XYXY,XYYX,…… 一对相等数字和两个不同数字:XXYZ,XYXZ,XYZX,…… 所有数字都不同. 所有变量都在一定的非连续范围内
我想在4个整数变量i,j,k和l中找到对称性.
对称性是:

>所有四个数字相等:XXXX,
>三个数字相等:XXXY,XXYX,XYXX,YXXX
>两对相等的数字:XXYY,XYXY,XYYX,……
>一对相等数字和两个不同数字:XXYZ,XYXZ,XYZX,……
>所有数字都不同.

所有变量都在一定的非连续范围内运行.我使用嵌套的if else语句.第一个if检查所有变量的不等式.如果没有,那么我有案例1.下一个if检查是否有任何相等的对.如果没有,那么情况5.下一个if检查三个相等的数字.如果为真,则为情况2.否则,最后一个if检查两对相等的数字.如果是,则为案例3,否则为案例4.

if(!(i==j && j==k && k==l)){
    if(i==j || i==k || i==l || j==k || j==l || k==l){
     if((i==j && j==k) || (i==j && j==l) || (i==k && k==l) || (j==k && k==l)){            ...//do something
     }else{
    if((i==j && k==l) || (i==k && j==l) || (i==l && j==k)){ 
...//do something
    }else{
     ...//do something
    }           
  }
     }else{
     ...//do something  
     } 
 }else{
  ...//do something
 }

这样做有更好的方法吗?我的意思是更好的表现,因为我必须进行数百万次的测试.

解决方法

与samgak相似的想法,但不需要外部表.只计算所有比赛的总和

int count = (i==j) + (i==k) + (i==l) + (j==k) + (j==l) + (k==l);

并切换以下选项

switch (count){
case 0: //All differenct
case 1: //One same
case 2: //Two different pairs
case 3: //Three same
case 6: //All are same
}

同样,如前所述,在某些情况下,您当前的代码可能会更快.特别是如果最常见的情况是所有元素相等的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读