华为在线训练(7)

1、两个矩阵相乘:data(n1,n3)=data1(n1,n2)*data2(n2,n3);

知道怎么动态的创建二维数组

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
    int n1,n2,n3;
    int i,j,k,sum;
    int **data1;//创建3个动态二维数组
    int **data2;
    int **data;
	//cout<<"请输入矩阵的行、列、行"<<endl;
	while(cin>>n1>>n2>>n3)//第一个矩阵为n1xn2,第二个矩阵为n2xn3
	{

		//cin>>n1>>n2>>n3;
		data1=new int *[n1];//创建行指针
		data2=new int *[n2];
		data =new int *[n1];
		for(i=0;i<n1;i++)    //为每一行分配空间
			data1[i]=new int[n2];
		for(i=0;i<n2;i++)
			data2[i]=new int[n3];
		for(i=0;i<n1;i++)
			data[i]=new int[n3];
		//cout<<"请输入矩阵1:"<<endl;
		for(i=0;i<n1;i++)
		{
			for(j=0;j<n2;j++)
			{
				cin>>data1[i][j];
			}
		}
		//cout<<"请输入矩阵2:"<<endl;
		for(i=0;i<n2;i++)
		{
			for(j=0;j<n3;j++)
			{
				cin>>data2[i][j];
			}
		}
		//矩阵相乘
		//cout<<"矩阵1*矩阵2="<<endl;
		for(i=0;i<n1;i++)
		{
			for(j=0;j<n3;j++)
			{
				sum=0;
				for(k=0;k<n2;k++)
				{
					sum=sum+data1[i][k]*data2[k][j];
				}
				data[i][j]=sum;
				cout<<data[i][j];
				if(j>=0&&j<n3-1)//在OJ平台上,输出的最后一个不能有空格
					cout<<" ";
			}
			cout<<endl;
		}
		//动态二维数组撤销
		for(i=0;i<n1;i++)
			delete[] data1[i];
		delete[] data1;
		for(i=0;i<n2;i++)
			delete[] data2[i];
		 delete[] data2;
		for(i=0;i<n1;i++)
			delete[] data[i];
		delete[] data;
	}
	return 0;
}
2、尼科彻斯定理
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。m属于[1,100],超出范围则报错。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
规律:
展开式从(m*m-m+1)开始,步进为2,共显示m个

#include <iostream>
using namespace std;
int main()
{
    int num,n;
	while(cin>>num)
	{
		n=num*num-num+1;
		for(int i=0;i<num;i++)
		{
			cout<<n+2*i;
			if(i>=0&&i<num-1)
				cout<<'+';
		}
		cout<<endl;
	}
    return 0;
}
3、字符串分解:
如:chong qing da xue
以空格为分割符,输出为:
4
chong
qing
da
xue
若:chong "qing da" xue
双引号里面的算一个,输出为:
3
chong
qing da
xue

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
	string str;
	int i,flag=0,num=0;
	while(getline(cin,str))
	{
		for(i=0;i<str.size();i++)
		{
			if(str[i]=='"')
				flag++;//用于统计引号的个数,一对引号,才是一个分割字符串
			if(str[i]==' '&&(flag%2)==0)//
				num++;
		}
	        cout<<num+1<<endl;
		flag=0;
		for(i=0;i<str.size();i++)
		{
			if(str[i]=='"')
				flag++;
			else if(str[i]==' '&&(flag%2)==0)
				cout<<endl;
			else cout<<str[i];
		}
		cout<<endl;
	}
    return 0;
}
4、求立方根:

首先要知道什么是牛顿迭代法:


比如求解:,c++程序为:

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	double x1=1.5,x0,f,f1;
	do
	{
		x0=x1;
		f=((2*x0-4)*x0+3)*x0-6;
		f1=(6*x0-8)*x0+3;
		x1=x0-f/f1;
	}while(fabs(x1-x0)>0.0001);
	printf("%0.1f",x1);
	return 0;
}
相似的,求一个数的立方根,c++代码如下:

#include<iostream>
#include<math.h>
using namespace std;
double getCubeRoot(double input)
{


double x=input,x0;
do
{
x0=x;
x=x0-(x0*x0*x0-input)/(3*x0*x0);
}while(fabs(x-x0)>0.00001);
return x;
}
int main()
{
double input=11,output;
output=getCubeRoot(input);
printf("%0.1f",output);
return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值