C语言2
- 格式:doc
- 大小:32.50 KB
- 文档页数:2
1、编写函数判断任意给定的二维整数数组(100×100)中是否有相同元素。
参考答案1:
#define M 100
#define N 100
bool fun(int arr[M][N]) { //含有相同元素时返回false否则返回true
int i,j,k,t;
for(i=0; i<M; i++)
for(j=0; j<N; j++){
//和当前行的剩余元素进行比较
for(t=j+1;t<N;t++){
if(arr[i][j]==arr[i][t])
return false;
}
//和剩余行的所有元素进行比较
for(k=i+1; k<M; k++)
for(t=0; t<N; t++)
if(arr[i][j]==arr[k][t])
return false;
}
return true;
}
参考答案2:把二维数组当成一维数组来处理
#define M 100
#define N 100
bool fun(int arr[M][N]) { //含有相同元素时返回false否则返回true
int i,j;
int size=M*N;
for(i=0; i<size-1; i++)
for(j=i+1; j<size; j++){
if(arr[0][i]==arr[0][j])
return false;
}
return true;
}
其他程序:
#define M 100
#define N 100
bool fun(int arr[M][N]) {//含有相同时返回false否则返回true
int i,j,k,t;
for(i=0; i<M; i++)
for(j=0; j<N; j++)
for(k=0; k<M; k++)
for(t=0; t<N; t++){
if(arr[i][j]==arr[k][t]&&i!=k&&j!=t) return false;
}
return true;
}
点评,上面三种实现,效率最高的是答案二效率最低的是答案三。
2、编写函数,找出给定的二维数组A中的所有鞍点。
若一个数组元素A[i,j]正好是矩阵A第i行的最小值,第j列的最大值,则称其为A的一个鞍点。
参考答案:
#include<stdio.h>
#define M 5
#define N 5
void AnDian(int arr[M][N],int m,int n){
int i,j;
int count=0;//计数器
for(i=0; i<m; i++)
for(j=0; j<n; j++){
int k;
bool bl=true;//先假定该元素是鞍点
for(k=0; k<n; k++)//行
if(arr[i][k]<arr[i][j]) {
bl=false;
break;
}
for(k=0; k<m; k++)//列
if(arr[k][j]>arr[i][j]){
bl=false;
break;
}
if(bl){
printf("该矩阵存在鞍点,它是data[%d,%d]: %d \n",i,j,arr[i][j]);
count++;//计数器
break;
}
}
if (count==0)
printf("该矩阵不存在鞍点.\n");
}
void main()
{int
data[M][N]={{3,1,3,3,5},{4,13,3,2,44},{435,454,255,312,78},{1,3,4,4,6},{0,1,3,5,7}};
AnDian(data,M,N);
}。