矩阵重复元素检测
问题描述:编写程序判断任意给定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
问题描述:编写程序判断任意给定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))
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语句不执行。
以上三个都是正确的;
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秋高级语言程序设计