案例:立方体相等

这段代码考虑了同一立方体正放侧放是同一种情况

 #include"methodState.h"class Cube {
 private:
     int len;
     int wid;
     int hig;
 public:
     int getLen() {
         return this->len;
     }
     void setLen(int len) {
         this->len = len;
     }
     int getWid() {
         return this->wid;
     }
     void setWid(int wid) {
         this->wid = wid;
     }
     int getHig() {
         return this->hig;
     }
     void setHig(int hig) {
         this->hig = hig;
     }
     int getArea() {
         return (len * wid + wid * hig + len * hig) * 2;
     }
     int getVolume() {
         return len * wid * hig;
     }
 };
 //判断两立方体是否相等
 bool equals(Cube& c1, Cube& c2) {//引用传递不必复制形参空间
/*创建两个数组记录立方体长宽高,用嵌套for循环遍历两个数组,
     若数组1中有元素等于数组2中某元素,就将数组2中该元素删除,数组长度减1,count加1
     ,若count=3,证明两数组中三个元素分别相等(位置可能不同)*/
     int arrays1[] = { c1.getLen(),c1.getWid(),c1.getHig() };
     int arrays2[] = { c2.getLen(),c2.getWid(),c2.getHig() };
     int len1 = sizeof(arrays1) / sizeof(arrays1[0]);
     int len2 = sizeof(arrays2) / sizeof(arrays2[0]);
     int count = 0;//计数变量,若两个立方体中有两条边分别相等,则count++
for (int i = 0; i < len1; i++) {
         for (int j = 0; j < len2; j++) {
             if (arrays1[i] == arrays2[j]) {
                 count++;
                 for (int k = j; k < len2; k++) {
                     //将该元素删除,下一次重新遍历,删除的好处在于防止出现长宽高为20,20,20的重复情况
                     arrays2[k] = arrays2[k + 1];
                 }
                 len2--;
             }
         }
     }
     if (count == 3) {
         return true;
     }
     else
         return false;
 }
 int main() {
 ​
     Cube c1;
     Cube c2;
     Cube c3;
     Cube c4;
 ​
     c1.setLen(10);
     c1.setWid(20);
     c1.setHig(30);
     cout << "c1的长宽高:" << c1.getLen() << "  " << c1.getWid() << "  "<< c1.getHig() << "  ";
     cout << "c1的表面积:" << c1.getArea() << endl;
     cout << "c1的体积:" << c1.getVolume() << endl;
 ​
     c2.setLen(40);
     c2.setWid(20);
     c2.setHig(30);
     cout << "c2的长宽高:" << c2.getLen() << "  " << c2.getWid() << "  " << c2.getHig() << "  ";
     cout << "c2的表面积:" << c2.getArea() << endl;
     cout << "c2的体积:" << c2.getVolume() << endl;
     c3.setLen(40);
     c3.setWid(20);
     c3.setHig(30);
     cout << "c3的长宽高:" << c3.getLen() << "  " << c3.getWid() << "  " << c3.getHig() << "  "; 
cout << "c3的表面积:" << c3.getArea() << endl; 
cout << "c3的体积:" << c3.getVolume() << endl; 
c4.setLen(30); 
c4.setWid(20); 
c4.setHig(10); 
cout << "c4的长宽高:" << c4.getLen() << "  " << c4.getWid() << "  " << c4.getHig() << "  "; 
cout << "c4的表面积:" << c4.getArea() << endl; 
cout << "c4的体积:" << c4.getVolume() << endl; 
​ 
bool r1 = equals(c1, c2); 
bool r2 = equals(c3, c2); 
bool r3 = equals(c1, c3); 
bool r4 = equals(c1, c4); 
if (r1 == true) {  
cout << "c1=c2" << endl;  
    } 
else 
cout << "c1!=c2" << endl; 
if (r2 == true) { 
cout << "c3=c2" << endl; 
    } 
else 
cout << "c3!=c2" << endl; 
if (r3 == true) { 
cout << "c1=c3" << endl; 
    } 
else 
cout << "c1!=c3" << endl; 
if (r4 == true) { 
cout << "c1=c4" << endl; 
    } 
else 
cout << "c1!=c4" << endl; 
system("pause"); 
return 0; 
}

 

image-20211205172820416

有弹幕说,比较立方体相等只需要比较表面积和体积分别相等,我认为这种说法不对

设两个立方体长宽高分别是a1,b1,c1,a2,b2,c2,则

(a1*b1+a1*c1+b1*c1)*2=(a2*b2+a2+c2+b2*c2)*2

a1*b1*c1=a2*b2*c2

三个未知数两个方程,无数个解

 来源:b站黑马

 

posted on 2021-12-05 19:53  托马斯源  阅读(66)  评论(0编辑  收藏  举报