当前位置:网站首页>战疫杯--奇奇怪怪的形状
战疫杯--奇奇怪怪的形状
2022-07-28 05:26:00 【步步高升b】
小凡有一张边长为2的正方形白纸,上面画了2×2个边长为1的格子,每个格子上可以放置棱长为1的立方体。小凡手中有若干个棱长为1的立方体,他随机地在每个格子上放置一些立方体,求由这些立方体组成的几何体的表面积。

输入格式:
输入两行,每行两个不超过100的正整数,代表从俯视的角度看,白纸所画每个格子上立方体的数量。
输出格式:
输出一行,包含一个整数,表示几何体的表面积。
输入样例:
上图对应的输入数据如下:
2 1
1 1
输出样例:
20
代码如下:
#include<iostream>
using namespace std;
int main() {
int a[5];
cin>>a[1]>>a[2]>>a[3]>>a[4];
int sum = 0;
sum = (a[1]+a[2]+a[3]+a[4])*6 - 8;//由于是正整数,故底层至少有4正方形,每相邻一个减少两个面,4个两两相邻,故减少8个面,故减去8
for (int i = 1; i < 5; i++) {
if (a[i] > 1) sum -= 2*(a[i]-1);
}//每增加一层,都要与底层面接触,故减少2个面
int max = (a[1]>a[2])?a[1]:a[2];//如果输入4 3 1 2,则顶层不相等,但中间层有相等的,故要通过循环来判断
int min = (a[1]<a[2])?a[1]:a[2];
for (;max > 1; max--) {
if (max == min) {
sum -= 2 * (max - 1);
}
}//第一行两个正方形相邻的情况
max = (a[1]>a[3])?a[1]:a[3];
min = (a[1]<a[3])?a[1]:a[3];
for (;max > 1;max--) {
if (max == min) sum -= 2 * (max - 1);
}//第一列两个正方形相邻的情况
max = (a[3]>a[4])?a[3]:a[4];
min = (a[3]<a[4])?a[3]:a[4];
for (;max > 1;max--) {
if (max == min) sum -= 2 * (max - 1);
}//第二行两个正方形相邻的情况
max = (a[2]>a[4])?a[2]:a[4];
min = (a[2]<a[4])?a[2]:a[4];
for (;max > 1;max--) {
if (max == min) sum -= 2 * (max - 1);
}//第二列两个正方形相邻的情况
cout<<sum;
}
min) sum -= 2 * (max - 1);
}//第二列两个正方形相邻的情况
cout<<sum;
}
边栏推荐
猜你喜欢
随机推荐
【学习笔记】vim 编辑器
转义字符笔记
相对路径和绝对路径
【C语言】自定义结构体类型
2022-07-19 达梦数据库-实例创建和管理
详解安装msdn 2015及其注意事项
自定义组件--父子组件之间的通信
2022-07-19 Damon database connection instance, execution script, system command
OpenGL development environment configuration [vs2017] + frequently asked questions
什么气传导蓝牙耳机好、配置比较高的气传导耳机推荐
2022-07-19 Damon database - instance creation and management
Filter
2022年七夕礼物推荐!好看便宜又实用的礼物推荐
How many columns are the most suitable for Clickhouse to build a width table?
自定义组件--数据监听器
开放式耳机推荐哪款最好、性价比最高的开放式耳机
C语言memcpy库函数与memmove的作用
scrapy 定时执行
QT parse string into JSON data and parse
正反斜杠笔记


![[c语言]--一步一步实现扫雷小游戏](/img/ee/49ddfcd948ccd5c8c9dec3c48c6112.png)





