#include
void main(void)
{
int b[100] = ; /*用于计数的数组,数值为x的由b[x-1]显示*/
int max , *p ,num = 0,k1,Line = 0;
int i ,j ,k ,c[5] = ; /*c数组保存前五个数量最多的数字,p用于后面的出现多个相同的频数的数组*/
for(Line = 0 ; Line <=900;Line+=100)
{
for( i = Line ;i<100+Line ; i++)
for( j = 0 ; j < 10 ; j++ )
b[ a[i][j] ]++; /*计数*/
/*下面找寻频率最高的5个数据,对b数组进行排序可以,不过排序后不再知道其原来的数据,要完成这个操作有两条路,一个是牺牲内存,即创造另外一个数组,进行排序,花费内存与b数组相同;二是多花时间,进行多次遍历搜索,下面采用第二种*/
for(j = 0; j<5;j++)
for(i = 0 ; i < 100 ; i++ )
{
max = 1;
k = 0;
if( max < b[i] && i!= lookup(i,c) ) max = b[i];/*lookup()函数的用法可以看一看*/
else if(max == b[i] ) k1++; /*当前最大值的数目自增*/
}
c[j] = max; /*保存第k大的元素*/
if(k1 != 0)
{ /*这里处理有相同的频率的几个数,我就不写了,内容是把这几个数都保存下来*/
j += k;
}
if(k + j > 4) break; /*最大的五个元素没有找到,桐段码楼主的题意有些没理清除,我认为是重新开始计局哪数没错,这个所谓的求有多少次就是这个道理,寻找符合条件的,如果100行内前五中第五名有并列的(当然有可能是三个第四名之类),就不再进行后面的是否这五个元素均存在的判断了*/
else if(k + j == 4 )
{
for(k1 = 0 ; k1 < 5 ; k1++ )
if( find(c[k1],a[i+Line],10) ) ; /*原型find(int x,int y[],int z),在y数组中寻找与x值相同的元素,y数组大小为z,这个应该不是难点,寻找到则返回非零值,否则返回0值*/燃绝
else break;
if(k1 == 5) num++; /*全部五个元素均找到,次数增加1*/
}
}
}
printf("次数为%d",num);
}
可举毕以使用指针的指针方式戚陪:(c语言的把new换一下malloc就行了)
#include
#include
char** metrix_allocation(int row, int col)
{
char** p = new char*[row];
for (int i = 0; i < row; i++)
{
p[i] = new char[col];
}
return p;
}
int main()
{
char **p =metrix_allocation(2,2);
for(int k=0;k<2;k++)
{
for (int j=0;j<2;j++)
{
p[k][j]='a'+ k + j;
}
}
for(int k=0;k<2;k++)
{
for (int j=0;j<正仔芹2;j++)
{
printf("%c\t",p[k][j]);
}
printf("\n");
}
return 0;
}
void test(int** a)
{
//做任何工作
}
void main()
{
int k[1][1];
//初始化k
test(k);
//执行完test后,k的孝弯值就会变了,把参数a的值巧搏闷银历传回来
}
C++就野凯州简单一些,使用引用&
C,方便点,使用颂蔽二维数组memcopy
麻烦点,使用二维指针,如果一维指针不越界的话,用一维指针也非孙慧常方便
按题目的说法,是返芹竖回二维数组的嫌斗大元素,那就简单了。如有:
int a[3][4];
...
int fun(....)
{ ....
return a[1][2]; //这里的下标,根销友据你的要求来计算获得
}
函数返回的类型与数组元素的类型相同