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;
}