C++通过动态内存分配来来生成一个动态的二维数组,要求行列相乘为偶数

给定1—5有5个数字,这5个数字在二维数组出现,出现的位置和次数不定,只是要求出现的数字的个数为偶数倍。。。。。。。类似于连连看的玩法... 给定1—5有5个数字,这5个数字在二维数组出现,出现的位置和次数不定,只是要求出现的数字的个数为偶数倍。。。。。。。类似于连连看的玩法 展开
 我来答
White_MouseYBZ
2018-09-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6684万
展开全部
#include "stdio.h"
#include <stdlib.h>
#include "time.h"
int main(int argc,char *argv[]){
int m,n,i,j,**p,*q;
srand((unsigned)time(NULL));
m=rand()%10+1;
while(m*(n=rand()%10+1)&1);//保证m*n是偶数
q=(int *)malloc(sizeof(int)*m*n);
if(q==NULL || (p=(int **)malloc(sizeof(int *)*m))==NULL){
printf("Application memory failure...\n");
return 0;
}
for(i=0;i<m;p[i]=q+n*i++);//组织成二维数组
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%2d",p[i][j]=rand()%5+1);
printf("\n");
}
free(q);
free(p);
return 0;
}

运行样例:

追问

生成的数的个数没有保证是偶数,就比如生成中的1,那么1个个数为偶数,就像连连看,如果相同的图片的个数不是偶数,最后肯定消除不了

追答
//#include "stdafx.h"//If the vc++6.0, with this line.
#include <iostream>
#include "time.h"
using namespace std;
int main(int argc,char *argv[]){
int m,n,i,j,k,t,x,**p,*q;
srand((unsigned)time(NULL));
m=rand()%10+1;
while(m*(n=rand()%10+1)&1);//保证m*n是偶数
q=new int[k=m*n];
if(q==NULL || (p=new int *[m])==NULL){
cout << "Application memory failure...\n";
return 0;
}
for(j=k>>1,i=0;i<j;q[i]=q[k-1-i]=rand()%5+1,i++);//保证数字个数是偶数
for(t=rand()%k+5,i=0;i<t;i++){//打乱一下,免得相同的数字都两两在一起
x=q[j=rand()%k];
q[j]=q[k-1];
q[k-1]=x;
}
for(i=0;i<m;p[i]=q+n*i++);//组织成二维数组
for(i=0;i<m;i++){
for(j=0;j<n;cout.width(2),cout << p[i][j++]);
cout << endl;
}
delete []q;
delete []p;
return 0;
}

运行样例:

DoramiHe
2018-09-23 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
【任务1】:
编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。
实验要求
(1) 转置函数参数为二维数组;
(2) 在main函数中实现输入、输出
#include <iostream>
using namespace std;
static int b[3][3];
void change(int (*a)[3])//转置函数
{
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{
b[m][n]=a[n][m];
}
}
}
int main()
{
int a[3][3];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cin>>a[i][j];//双重for循环向二维数字里面输入数据
}
}
change(a);
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{
cout<<b[m][n]<<' ';
}
cout<<endl;
}
return 0;
}
【任务2】
使用new动态分配内存生成数组来实现任务一中的函数功能。
实验要求
(1) 转置函数参数为整形指针;
(2) 在main中使用new操作符分配内存生成动态数组,实现数组的输入和输出,函数结束时使用delete回收动态分配的内存空间。
(3) 通过Debug跟踪指针的值及其所指的对象的值。
#include <iostream>
using namespace std;
static int b[3][3];//静态数组
void change(int (*a)[3])//转置函数
{
for(int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
b[i][j]=*(*(a+j)+i);//转置
}
}
}

int main()
{
int (*cp)[3]=new int[3][3];
for(int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
cin>>*(*(cp+i)+j);//双重指针向二维数组里面输入数据
}
}
change(cp);
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{
cout<<b[m][n]<<" ";
}
cout<<endl;
}
return 0;
}
---------------------
追问
朋友,网上摘抄的别发,我的问题网上没有的,所以别发了,也不会采纳的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式