(编程训练)再回首,数据结构——二维数组的操作

来源:互联网 发布:有线电视端口改网线 编辑:程序博客网 时间:2024/05/08 19:48

       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。


       希望这些能提供给初学者一些参考。

 

      在VC++6.0下可运行,当初还写了不少注释。

 

【问题描述】

设二维数组a含有m*n个整数。

(1)写出算法判断a中所有元素是否互不相同,输出相关信息(Yes/No):

(2)a中所有元素互不相同时,试分析算法的时间复杂度。

【基本要求】

·功能:判断二维数组a中各元素是否互不相同,并给出当a中所有元素互不相同时算法的时间复杂度。

·输入:a中各元素的值。

·输出:对a中各元素是否有互不相同的判断结果。

【测试数据】

输入数组行数、列数:3,4,以及各元素的值:0,2,6,4,-9,-1,5,12,3,7,8,预期的输出结果是:Yes。

输入数组行数、列数:3,4,以及各元素的值:0,2,6,4,-9,-1,5,12,3,7,8,预期的输出结果是:No。

【模块划分】

① 输入二维数组a中各元素的值Input。

② 判断a中所有的元素是否互不相同JudgEqual。

③ 主函数main,依次调用函数Input、JudgEqual。



/*二维数组*/#include <stdio.h>void Input(int* a,int m, int n){int i,j;for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&a[i*n+j]);}void JudgEqual(int *a, int m, int n){int i,j,k,l;for(i=0;i<m;i++){for(j=0;j<n;j++){for(k=j+1;k<n;k++)if(a[i*n+k]==a[i*n+j]){printf("No!\n");return;}for(l=i+1;l<m;l++){for (k=0;k<n;k++){if(a[l*n+k]==a[i*n+j]){printf("No!\n");return;}}}}}printf("Yes!\n");}int main(void){int a[100],m,n,num;scanf("%d",&num);getchar();while(num--){scanf("%d%d",&m,&n);getchar();Input(a,m,n);JudgEqual(a,m,n);}return 0;}




0 0