C++ 魔方小正方体分类计数

魔方大家都玩过吧?常见的魔方,每边上有 3 个小正方体,如下图所示:

/file/20181008060222_20181008.jpg

我们把魔方每边上的小正方体数量,叫魔方的'阶',所以,常见的魔方叫'3阶魔方'。不过,魔方可不是只有 3 阶的,还有 2、4、5……阶的呢,如下图所示:

/file/20181008060240_20181008.jpg

观察所有的魔方,你会发现,我们可以把魔方表面上的小正方体分为三类:

  1. 有三个面露在外面的;
  2. 有两个面露在外面的;
  3. 有一个面露在外面的。

当然,这三类小正方体的数量会随着魔方阶的不同而不同。

你的任务就是计算一下,对于给定阶数的魔方,这三类小正方体分别有多少个。

输入格式

只有一个整数 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;
}
C++ 魔方小正方体分类计数

原文地址: https://www.cveoy.top/t/topic/nqLg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录