C++ 魔方小正方体分类计数
C++ 魔方小正方体分类计数
魔方大家都玩过吧?常见的魔方,每边上有 3 个小正方体,如下图所示:
/file/20181008060222_20181008.jpg
我们把魔方每边上的小正方体数量,叫魔方的'阶',所以,常见的魔方叫'3阶魔方'。不过,魔方可不是只有 3 阶的,还有 2、4、5……阶的呢,如下图所示:
/file/20181008060240_20181008.jpg
观察所有的魔方,你会发现,我们可以把魔方表面上的小正方体分为三类:
- 有三个面露在外面的;
- 有两个面露在外面的;
- 有一个面露在外面的。
当然,这三类小正方体的数量会随着魔方阶的不同而不同。
你的任务就是计算一下,对于给定阶数的魔方,这三类小正方体分别有多少个。
输入格式
只有一个整数 n,表示魔方的阶数,已知 2<=n<=1000。
输出格式
有三行,每行一个整数,分别表示对于 n 阶的魔方,第一类、第二类、第三类的小正方体的数量。
输入输出样例
样例 1
输入样例
3
输出样例
8
12
6
解法一:直接计算公式
通过观察可以发现,对于一个n阶的魔方,第一类小正方体的数量是8,第二类小正方体的数量是4(n-2)4,第三类小正方体的数量是4(n-2)(n-2)。因此可以直接计算出结果。
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int type1 = 8;
int type2 = 4 * (n-2) * 4;
int type3 = 4 * (n-2) * (n-2);
cout << type1 << endl;
cout << type2 << endl;
cout << type3 << endl;
return 0;
}
解法二:循环遍历
通过循环遍历魔方的每个小正方体,判断它所在的位置,根据位置来统计第一类、第二类、第三类小正方体的数量。这种解法比较复杂,不推荐使用。
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int type1 = 0;
int type2 = 0;
int type3 = 0;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
if(i==1 || j==1 || k==1 || i==n || j==n || k==n){
type1++;
}
else if(i==2 || j==2 || k==2 || i==n-1 || j==n-1 || k==n-1){
type2++;
}
else{
type3++;
}
}
}
}
cout << type1 << endl;
cout << type2 << endl;
cout << type3 << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nqLg 著作权归作者所有。请勿转载和采集!