(emmm。。。现在我长大了,13岁。看到当年的垃圾博客。。。woc连mardown都不会用)
(身为点击量最大的博客,今天,2019.7.3,我做了一些改进)
作者写这篇博客时还是个12岁的小学森。
有大神发现bug及时指教。我感激不尽。
如果要复制我的代码,给个鼓励呗~~~
这个程序可以实现三视图求体积,若有不同解则会求最大
先介绍以下俯视盖楼算法
如:
正视图:
1 1 1
1 1 1
1 1 1
左视图:
1 1 1
1 1 1
1 1 1
俯视图:
1 1 1
1 1 1
1 1 1
先每一行取高,标在俯视图上
主视图:3 3 3
左视图:3 3 3
俯视图(标后):
1 1 1 3
1 1 1 3
1 1 1 3
3 3 3
然后每一个在中间的格子取两边最小值
即“盖楼”
俯视图(内部):
3 3 3
3 3 3
3 3 3
全部相加,求得体积27.
看一下代码
第一段:
//本程序采用"俯视盖楼算法"
```cpp
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int a[16][16],xa,ya,la[16];//正视图
int b[16][16],xb,yb,lb[16];//左视图
void input(int a[16][16],int xa,int ya)
{
for(int i=1;i<=ya;i++)
{
for(int j=1;j<=xa;j++)
{
cin>>a[i][j];
}
}
}
int c[16][16],xc,yc,lc[16];//俯视图
```
不多说,自己看
第二段:
void line(int a[16][16],int num[16],int x,int y)
{
int sum=0;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
sum+=a[i][j];
}
num[i]=sum;
sum=0;
}
}
将一个二维的视图转换为一位的标数
为往后的计算打基础
第三段:
cout<<"输入长:";cin>>xa;
cout<<"输入高:";cin>>ya;
cout<<"输入主视图:"<<endl;input(a,xa,ya);
line(a,la,xa,ya);
cout<<"输入宽:";cin>>xb;
cout<<"输入高:";cin>>yb;
cout<<"输入左视图:"<<endl;input(b,xb,yb);
line(b,lb,xb,yb);
cout<<"输入长:";cin>>xc;
cout<<"输入宽:";cin>>yc;
cout<<"输入俯视图"<<endl;input(c,xc,yc);
输入。
第四段:
for(int i=1;i<=xc;i++)
{
c[i][yc+1]=la[i];
}//正视图标数
for(int i=1;i<=yc;i++)
{
c[xc+1][i]=lb[i];
}//左视图标数
两边标数在俯视图上
第五段:
for(int i=1;i<=yc;i++)
{
for(int j=1;j<=xc;j++)
{
if (c[i][j]!=0)
{
c[i][j]=min(c[xc+1][i],c[i][yc+1]);
}
}
}//盖楼,即每一个格子求最小值
第六段:
int v=0;//体积
for(int i=1;i<=yc;i++)
{
for(int j=1;j<=xc;j++)
{
v+=c[i][j];
}
}
cout<<"体积最大是"<<v<<endl;
return 0;
累加输出返回。
整体代码(要复制鼓励一下我呗~):
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int a[16][16],xa,ya,la[16];//正视图
int b[16][16],xb,yb,lb[16];//左视图
void input(int a[16][16],int xa,int ya){
for(int i=1;i<=ya;i++)
{
for(int j=1;j<=xa;j++)
{
cin>>a[i][j];
}
}
}
int c[16][16],xc,yc,lc[16];//俯视图
void line(int a[16][16],int num[16],int x,int y){
int sum=0;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
sum+=a[i][j];
}
num[i]=sum;
sum=0;
}
}
int main()
{
cout<<"输入长:";cin>>xa;
cout<<"输入高:";cin>>ya;
cout<<"输入主视图:"<<endl;input(a,xa,ya);line(a,la,xa,ya);
cout<<"输入宽:";cin>>xb;
cout<<"输入高:";cin>>yb;
cout<<"输入左视图:"<<endl;input(b,xb,yb);line(b,lb,xb,yb);
cout<<"输入长:";cin>>xc;
cout<<"输入宽:";cin>>yc;
cout<<"输入俯视图"<<endl;input(c,xc,yc);
for(int i=1;i<=xc;i++){
c[i][yc+1]=la[i];
}//正视图标数
for(int i=1;i<=yc;i++){
c[xc+1][i]=lb[i];
}//左视图标数
for(int i=1;i<=yc;i++)
{
for(int j=1;j<=xc;j++)
{
if (c[i][j]!=0)
{
c[i][j]=min(c[xc+1][i],c[i][yc+1]);
}
}
}//盖楼,即每一个格子求最小值
int v=0;//体积
for(int i=1;i<=yc;i++)
{
for(int j=1;j<=xc;j++)
{
v+=c[i][j];
}
}
cout<<"体积最大是"<<v<<endl;
return 0;
}
刚好66行。
祝大家在今后的程序人生中六六大顺。
这篇博客由12岁的作者编写,介绍了使用C++实现的三视图求体积程序,通过俯视盖楼算法计算三维形状的体积。程序首先解释了算法原理,然后展示了代码的四个主要部分:俯视图转换、输入处理、计算和输出。最后,作者邀请读者复制代码并给予鼓励。

382

被折叠的 条评论
为什么被折叠?



