任务描述
设二维数组a[1..m, 1..n] 含有m*n 个整数。写一个算法判断a中所有元素是否互不相同。
编程要求
输入
多组数据,每组数据有m+1行,第一行为二维数组的行数m和列数n,之后m行为输入的二维数组。当n=0且m=0时输入结束。
输出
对于每组数据分别输出一行,若二维数组中存在相等元素则输出“YES”,否则输出“NO”。
测试说明
平台会对你编写的代码进行测试:
测试输入: 4 3
1 2 3
4 5 6
7 8 9
10 11 12
3 4
1 2 3 4
5 6 7 8
1 9 10 11
0 0
预期输出: NO
YES
#include<iostream>
#define MAXSIZE 124
using namespace std;
int IsEqual(int a[MAXSIZE][MAXSIZE],int m,int n)
{//判断a中所有元素是否互不相同,存在相等元素则返回1,输出“YES”,否则返回0,输出“NO”
/**************begin************/
int flag=0;//标志是YES还是NO
int k=0;//一维数组的下标。后面要判断重复,所以全局
int b[MAXSIZE*MAXSIZE];//把二维全部放到一维。循环嵌套的话,复杂度低
for(int i=0;i<m;i++)//放到一维
{
for(int j=0;j<n;j++)
{
b[k++]=a[i][j];
}
}
for(int i=1;i<k;i++)//一维的每个元素,和前面所有比较,有重flag=1;
{//外循环遍历一维,每个元素遍历前面的比较
for(int j=0;j<i;j++)
{
if(b[i]==b[j])
{
flag=1;
}
}
}
if(flag==1) printf("YES\n");
else printf("NO\n");
return flag;
/**************end************/
}
int main()
{
int m,n; //行数m和列数n
while(cin>>m>>n&&m!=0&&n!=0)
{
int a[MAXSIZE][MAXSIZE],i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>a[i][j]; //输入二维数组
IsEqual(a,m,n); //二维数组中的元素查重
}
return 0;
}