关于矩阵重复元素检测判断条件的粗陋看法

矩阵重复元素检测
问题描述:编写程序判断任意给定3*3的两维整型数组中是否有相同元素。
输入:从键盘随机输入九个整数,作为数组的元素。
输出:如果数组中有相同元素,则输出“yes”;否则,输出“no”。
提示:OJ所用编译器,不支持bool类型。
样例1:输入 1 2 3 4 5 6 7 8 9   输出 no
样例2:输入 1 1 2 3 4 5 6 7 8   输出 yes
样例3:输入 1 2 3 3 4 5 6 7 8   输出 yes

样例4:输入 1 2 3 4 5 6 7 8 8   输出 yes


#include<stdio.h>

int main(void){

int a[3][3],i,j,m,n,k=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(m=0;m<3;m++)
for(n=0;n<3;n++){
if((a[i][j]==a[m][n])&&((i!=m)&&(j!=n)||(j!=n)&&(i==m)||(j==n)&&(i!=m)))  k=1;
}
if(k==1)
printf("yes");
else 
printf("no");
return 0;
}

对于if判断语句的描述:

 if((a[i][j]==a[m][n])&&((i!=m)&&(j!=n)||(j!=n)&&(i==m)||(j==n)&&(i!=m)))
if((a[i][j]==a[m][n])&&!(i==m&&j==n))
if((a[i][j]==a[m][n])&&(i!=m||j!=n))
以上三个都是正确的;
f((a[i][j]==a[m][n])&&(i!=m&&j!=n)错误原因在于:
会把同行不同列或者同列不同行的两个相同数值跳过;
假如A[0][0]和A[0][1]相同为1,满足a[i][j]==a[m][n],但此时i!=m为假,j!=n为真,&&操作会使(i!=m&&j!=n)为假,使判断条件整体为假,if语句不执行。

引用:中国大学慕课 吉林大学2015秋高级语言程序设计



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值