Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1396 Accepted Submission(s): 1106 Problem Description
Cowl is good at solving math problems. One day a friend asked him such a question: You are given a cube whose edge length is N, it is cut by the planes that was paralleled to its side planes into N * N * N unit cubes. Two unit cubes may have no common points or two common points or four common points. Your job is to calculate how many pairs of unit cubes that have no more than two common points. Process to the end of file.
Input
There will be many test cases. Each test case will only give the edge length N of a cube in one line. N is a positive integer(1<=N<=30).
Output
For each test case, you should output the number of pairs that was described above in one line.
Sample Input
1 2 3
Sample Output
0 16 297 The results will not exceed int type.
Hint
Hint Author
Gao Bo
Source
Recommend
Ignatius.L | We have carefully selected several similar problems for you:
我的做法比较沙茶 直接枚举N*N*N旁边的有多少个 访问过的设置成0
#include实际答案是 数学做法#include #include #include #include #include #include #include #include #define oo 0x13131313using namespace std;int map[51][51][51];int N;long long ans;void CLEAR(){ for(int i=0;i<=50;i++) for(int j=0;j<=50;j++) for(int k=0;k<=50;k++) { map[i][j][k]=0; } for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) for(int k=1;k<=N;k++) { map[i][j][k]=1; } ans=0;}void getans(int a,int b,int c){ if(map[a][b][c-1]==1) ans++; if(map[a][b][c+1]==1) ans++; if(map[a+1][b][c]==1) ans++; if(map[a-1][b][c]==1) ans++; if(map[a][b-1][c]==1) ans++; if(map[a][b+1][c]==1) ans++;}void solve(){ for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) for(int k=1;k<=N;k++) { getans(i,j,k); map[i][j][k]=0; }}int main(){// freopen("a.in","r",stdin);// freopen("a.out","w",stdout); while(cin>>N) { CLEAR(); solve(); ans=(N*N*N)*(N*N*N-1)/2-ans; cout< <
通过前左上的枚举方法 很好的去避免了重复计数的可能 很不错的枚举思路
#includeusing namespace std;int main(){ int n; while(cin>>n) cout<<(n*n*n*(n*n*n-1))/2-3*(n*n)*(n-1)<