战疫杯--奇奇怪怪的形状

小凡有一张边长为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;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-Gaojs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值