您的位置:首页 > 其它

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

2015-11-22 08:55 302 查看
矩阵重复元素检测

问题描述:编写程序判断任意给定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]
)&&((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]
)&&((i!=m)&&(j!=n)||(j!=n)&&(i==m)||(j==n)&&(i!=m)))

if((a[i][j]==a[m]
)&&!(i==m&&j==n))
if((a[i][j]==a[m]
)&&(i!=m||j!=n))

以上三个都是正确的;

f((a[i][j]==a[m]
)&&(i!=m&&j!=n)错误原因在于:

会把同行不同列或者同列不同行的两个相同数值跳过;

假如A[0][0]和A[0][1]相同为1,满足a[i][j]==a[m]
,但此时i!=m为假,j!=n为真,&&操作会使(i!=m&&j!=n)为假,使判断条件整体为假,if语句不执行。

引用:中国大学慕课 吉林大学2015秋高级语言程序设计
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息