本文共 1570 字,大约阅读时间需要 5 分钟。
突破口:开一个三维数组,模拟三维直角坐标系,详见代码。
代码如下:
#include#include #include #include typedef long long ll;using namespace std;const int inf=0x3f3f3f3f;const int maxn=1e2+5;int s[maxn][maxn][maxn];int main(){ int x,y,z,i,j,k; int sum; while(~scanf("%d%d%d",&x,&y,&z)) { sum=0; for(i=0;i<=x;i++) for(j=0;j<=y;j++) for(k=0;k<=z;k++) s[i][j][k]=0; for(i=1;i<=x;i++) for(j=1;j<=y;j++) { scanf("%d",&s[i][j][0]); if(s[i][j][0]==1) //等于1说明在这个位置有小正方形的投影,就将s[i,j,1~z]全部+1(相当于过该点画一条直线垂直于xOy) for(k=1;k<=z;k++) s[i][j][k]++; } for(i=1;i<=y;i++) for(j=1;j<=z;j++) { scanf("%d",&s[0][i][j]); if(s[0][i][j]==1) //等于1说明在这个位置有小正方形的投影,就将s[1~i,j,z]全部+1(相当于过该点画一条直线垂直于yOz) for(k=1;k<=x;k++) s[k][i][j]++; } for(i=1;i<=z;i++) for(j=1;j<=x;j++) { scanf("%d",&s[j][0][i]); //等于1说明在这个位置有小正方形的投影,就将s[ij,1~y,z]全部+1相当于过该点画一条直线垂直于xOz) if(s[j][0][i]==1) for(k=1;k<=y;k++) s[j][k][i]++; } for(i=0;i<=x;i++) for(j=0;j<=y;j++) for(k=0;k<=z;k++) if(s[i][j][k]==3) //只有当这个位置的值为3时,才有小正方形(即为三条直线相交之处) sum++; printf("%d\n",sum); } return 0;}
Tips:这道题要特别注意输入,输入一乱,全盘皆输。
转载地址:http://dddci.baihongyu.com/