#include<iostream.h>
int i,j,m,n;
void main()
{
cout<<"input m,n:";
cin>>m>>n;
int A[m][n],B[m];//位身末无法初始化?
cout<<"input 数组";
for (i=0,i<m,i++)
{ for (j=0,j<n,j++) cin>>A[i][j];};
for (i=0,i<m-1,i++)
{ B[i]=A[i][0];
for (j=0,j<n-1,j++)
{if (B[i]>A[i][j])
B[i]=A[i][j];}
if (B[i]<A[i][j])
B[i]=A[i][j];
}
cout<<B[i];
}
请指点。//
数组为什么无法初始化。//
还有一个方法是用类库来实现,如MFC中的CArray或STL中的类.你可以看一下这方面的东西.
1.若矩阵A[m*n]中的某个元素A[i,j]是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。假设以二维数组存储矩阵Am*n,试编写求出矩阵中所有马鞍点的算法。
#include<iostream.h>
int i,j,m,n;
void main()
{
cout<<"input m,n:";
cin>>m>>n;
int *a,*b;
a=new int[m*n];
b=new int[m];
cout<<"input 数组:";
for(i=0;i<m*n;i++)
cin>>a[i];
for (i=0;i<m ;i++){
b[i]=a[i*n-1];
for (j=0;j<m ;j++){
if(b[i]>a[i*j-1]) b[i]=a[i*j-1];
}
if(b[i]<a[i+n*i]){
b[i]=a[i+n*i];
return;
}
}
for (i=0;i<m ;i++)
cout<<b[i];
}帮我改改谢谢。//
我很菜别笑我。//
struct myStruct
{
int i;//别的类型的都可以的
float j;//
}
然后
CArray<myStruct,myStruct> m_myDataArray;
然后利用CArray的函数对m_myDataArray进行操作不就可以实现你的动态数组的功能了么?
或者你可这样进行初始化A[m][n]={0};
当循环开始, i = 0 时 ,循环内第一条语句就错了:
b[i]=a[i*n-1]; ----> b[0]=a[-1];
注意 C 或 C++ 中数组的下标从 0 开始。
b[i]=a[i*n-1]; //第1次循环i*n-1=-1下越界
for (j=0;j<m ;j++){
if(b[i]>a[i*j-1]) b[i]=a[i*j-1];
}
if(b[i]<a[i+n*i]){
b[i]=a[i+n*i];
return; //return只用于子函数的返回。
}
}
上面程序有问题,对于数组A、B无须初始化,对其进行直接赋值即可。改正如下:
#include<iostream.h>
int i,j,m,n,temp,k;
void main()
{
cout<<"input m,n:";
cin>>m>>n;
int *a,*b;
a=new int[m*n];
b=new int[m];
cout<<"input 数组:";
for(i=0;i<m*n;i++)
cin>>a[i];
for(i=0;i<m;i++){
temp=a[i*n];
for(j=1;j<m ;j++) //这两行程序找出了该列的最大值
if(temp>a[j*n]) temp=a[j*n]; //
for(k=0;k<n;k++)
if(temp>a[i*n+k]) break;
if(k==n) b[count++]=temp; //该列的最大值在该行是最小值
}
}
for(i=0;i<count;i++) //每一行每一列不一定有一个马鞍书。
cout<<b[i];
delete []b; //动态申请后记得释放掉
delete []a; //同上
}
babynuaa() 的程序有毛病,如何改谢谢大侠//
有毛病。for(i=0;i<count;i++) 加了int count=0,还不行for(i=0;i<count;i++) //error C2065: 'count' : undeclared identifier//
cout<<b[i];
delete []b; //动态申请后记得释放掉
delete []a; //同上
}
void main()
{
int i,j,m,n,temp,k;
int count=0;
cout<<"input m and n:"<<endl;
cin>>m;
cin>>n;
int *a,*row,*col;
a=new int[m*n]; //m行n列
row=new int[m*n];
col=new int[m*n];
cout<<"input 数组:"<<endl;
for(i=0;i<m*n;i++)
cin>>a[i]; for(i=0;i<m;i++)
{
int rowMinIndexOfCol=0;
temp=a[i*n];
//找出了该i行中最小值
for(j=1;j<n ;j++)
{
if(temp>a[i*n+j])
{
temp=a[i*n+j];
rowMinIndexOfCol=j;
}
}
//当一行中有多个一样的最小值时
for(j=0;j<n;j++)
{ //找出了该i行中每个最小值的列下标rowMinIndexOfCol
(temp==a[i*n+j])
{
rowMinIndexOfCol=j; int ColMaxIndexOfRow=i;//以(i,rowMinIndexOfCol)为基准,比较(k,rowMinIndexOfCol)中temp是否最大
for(k=0;k<m;k++)
{
if(temp<a[k*n+rowMinIndexOfCol])
{
ColMaxIndexOfRow=k;
break;
}
}
//循环一遍,还是初始值,(i,rowMinIndexOfCol)为鞍点
if(ColMaxIndexOfRow==i)
{ //在该行的最小值是该列最大值
row[count]=i;
col[count]=rowMinIndexOfCol;
count++;
}
}
}
} int r,c;
for(i=0;i<count;i++) //每一行每一列不一定有一个马鞍点。
{
r=row[i];
c=col[i];
cout<<"AnDian "<<i<<" :("<<r<<","<<c<<")=";
cout<<a[r*n+c]<<endl;
}
delete []row; //动态申请后记得释放掉
delete []col; //动态申请后记得释放掉
delete []a; //同上
cout<<count<<endl;
cin>>i;
}
int i,j,m,n,count=0;
void main()
{
cout<<"Please input m(行数)";
cin>>m;
cout<<"Please input n(列数)";
cin>>n;
int *a,*b,temp;
a=new int[m*n];
b=new int[m];//存放每一行的最小值;
cout<<"依次输入数组,共;"<<m*n<<"个数";
for(i=0;i<m*n;i++)
cin>>a[i];
for (i=0;i<m;i++)
{
b[i]=a[i*n];//相当于对b初始化一下;
for (j=0;j<n;j++)//求每一行的最小值;共有m个放到b中;
{
if(b[i]>a[i*n+j])
b[i]=a[i*n+j];
}
for (j=0;j<n;j++)//对每一个最小值求所在列,
//并判断在该列是不是最大;
{
if(b[i]==a[i*n+j])//记下该列号j;
{
for(temp=0;temp<m;temp++)
{
if(b[i]<a[temp*n+j])//一旦该列有一个大于该值,
break;//则跳出循环
}
if(temp==m)//如果该i行最小值确实是j列最大值则:
{count++;
cout<<i<<"行"<<j<<"列是一个马鞍点。";}
}
}
}
cout<<"共有"<<count<<"个马鞍点;";
delete []a;//释放内存;
delete []b;
#include<iostream.h>
int i,j,m,n,maxrow,temp,k;
void main()
{
cout<<"input m,n:";
cin>>m>>n;
int *a,*b;
a=new int[m*n];
b=new int[m];
cout<<"input 数组:";
for(i=0;i<m*n;i++)
cin>>a[i];
for(i=0;i<m;i++){
maxrow=i;
temp=a[i*n];
for(j=0;j<m ;j++) //这两行程序找出了该列的最大值
if(temp<a[j*n]) {temp=a[j*n];maxrow=j;} //
for(k=0;k<n;k++)
if(temp>a[j*n+k]) break;
if(k==n) b[count++]=temp; //该列的最大值在该行是最小值
}
}
for(i=0;i<count;i++) //每一行每一列不一定有一个马鞍书。
cout<<b[i];
delete []b; //动态申请后记得释放掉
delete []a; //同上
}
把if(temp>a[j*n+k]) break;改成
if(temp>a[maxrow*n+k]) break;
Sorry……
int i,j,m,n,maxrow,max,l,temp,k;
void main()
{
cout<<"input m,n:";
cin>>m>>n;
int *a,*b;
a=new int[m*n];
b=new int[m*n];
cout<<"input 数组:";
for(i=0;i<m*n;i++)
cin>>a[i];
for(i=0;i<m;i++){
for(l=0;l<n;l++){
temp=a[i*n+l];
for(j=0;j<m;j++)
if(temp<a[j*n+l]) temp=a[j*n+l];
for(int p=0;p<m;p++)
if(temp==a[p*n+l]){
for(k=0;k<n;k++)
if(temp>a[p*n+k]) break;
if(k==n) b[count++]=temp;
}
}
}
for(i=0;i<count;i++)
cout<<b[i];
delete []b;
delete []a;
}
现在也差不多了……(改了好多次)