17.1 (C++)

考试模拟题
请写程序,使得主程序能得到正确的输出

EXAMPLE INPUT
1000 2000
EXAMPLE OUTPUT
1000 2000
900 1900
1800 2800
主程序 (不能修改)

#include "source.cpp"

int main() {
    Integer a, b;
    cin >> a >> b;
    cout << a << " " << b << endl;
    link(a, b);
    a -= 100;
    cout << a << " " << b << endl;
    b += a;
    cout << a << " " << b << endl;
}

参考答案
正常答案by yizuodi

#include <iostream>
using namespace std;
class Integer{
    public:
    int data;
    Integer * link;
    int havelink;
    
    Integer(){data=0;havelink=0;}
    
    Integer & operator -=(int a){
        this->data=this->data-a;
        if(this->havelink==1){link->data=link->data-a;}
    }
    
    Integer & operator +=(Integer tmp){
        this->data=this->data+tmp.data;
        if(this->havelink==1){link->data=link->data+tmp.data;}
    }
};
istream & operator >>(istream & i,Integer & tmp){
    i >> tmp.data;
    return i;
}

ostream & operator <<(ostream & o,const Integer & tmp){
    o<<tmp.data;
    return o;
}

void link(Integer & a,Integer & b){
    a.havelink=1;
    b.havelink=1;
    b.link=&a;
    a.link=&b;
}

离谱答案by yizuodi

#include <iostream>
using namespace std;
class Integer{
    public:
    int data;
    static int add_number;
    static int add_number2;
    Integer * link;
    
    Integer(){data=0;}
    
    Integer & operator -=(int a){
        add_number=a;
    }
    
    Integer & operator +=(Integer tmp){
        add_number2=tmp.data-add_number;
    }
};
int Integer::add_number=0;
int Integer::add_number2=0;
istream & operator >>(istream & i,Integer & tmp){
    i >> tmp.data;
    return i;
}

ostream & operator <<(ostream & o,const Integer & tmp){
    o<<tmp.data-tmp.add_number+tmp.add_number2;
    return o;
}

void link(Integer a,Integer b){
    b.link=&a;
    a.link=&b;
}

ZHC的答案

//升级后的
#include <iostream>
using namespace std;

class Integer{
public:
    int data;
    int * link; 
    Integer(){
        data=0;
        link = NULL;
    }
    Integer( int t ){
        data = t;
    }
    
    Integer & operator -=(int t){
        this->data  -=  t;
        if( link != NULL) *link -= t ; 
        return *this ;
    }
    Integer & operator +=(int t){
        this->data  += t ;
        if( link != NULL){ *link += t ;  }
        return *this ;
    }
    
    Integer & operator +=(Integer tmp){
        this->data  += tmp.data;
        if( link != NULL) *link += tmp.data;
        return *this ;
    }
    
    Integer & operator -=(Integer tmp){
        this->data  -= tmp.data;
        if( link != NULL) *link -= tmp.data;
        return *this ;
    }
    
      Integer & operator = (int tmp) {
        this->data =  tmp ;
        return *this ;
    }
    Integer & operator =(Integer tmp){
        this->data =  tmp.data ;
        return *this ;
    }
    
};
istream & operator >>(istream & i,Integer & tmp){
    i >> tmp.data;
    return i;
}

ostream & operator <<(ostream & o,const Integer & tmp){
    o<<tmp.data;
    return o;
}

void link(Integer & a,Integer & b){
    b.link=&a.data;
    a.link=&b.data;
}

答案

#include <iostream>
#include <vector>
using namespace std;

class Integer
{
public:
    int value;
    vector<Integer *> linked;
    
    Integer() {
        value = 0;
    }
    
    Integer(int value_) {
        value = value_;
    }
    
    Integer & operator += (int value_) {
        value += value_;
        for (int i = 0; i < linked.size(); ++ i) {
            linked[i]->value += value_;
        }
        return *this;
    }
    
    Integer & operator += (const Integer & other) {
        return (*this) += (other.value);
    }
    
    Integer & operator -= (const Integer & other) {
        return (*this) += (-other.value);
    }
};

void link(Integer & int1, Integer & int2) {
    int1.linked.push_back(&int2);
    int2.linked.push_back(&int1);
}

ostream & operator << (ostream & out, const Integer & int1) {
    out << int1.value;
    return out;
}

istream & operator >> (istream & in, Integer & int1) {
    in >> int1.value;
    return in;
}
上一篇: 18.1 (C++) 下一篇: [离谱答案]16.1 (C++)
支持 makedown语法

已有 3 条评论

  1. sb

    //升级后的
    #include
    using namespace std;

    class Integer{
    public:
    int data;
    int * link;
    Integer(){
    data=0;
    link = NULL;
    }
    Integer( int t ){
    data = t;
    }

    Integer & operator -=(int t){
    this->data -= t;
    if( link != NULL) *link -= t ;
    return *this ;
    }
    Integer & operator +=(int t){
    this->data += t ;
    if( link != NULL){ *link += t ; }
    return *this ;
    }

    Integer & operator +=(Integer tmp){
    this->data += tmp.data;
    if( link != NULL) *link += tmp.data;
    return *this ;
    }

    Integer & operator -=(Integer tmp){
    this->data -= tmp.data;
    if( link != NULL) *link -= tmp.data;
    return *this ;
    }

    Integer & operator = (int tmp) {
    this->data = tmp ;
    return *this ;
    }
    Integer & operator =(Integer tmp){
    this->data = tmp.data ;
    return *this ;
    }

    };
    istream & operator >>(istream & i,Integer & tmp){
    i >> tmp.data;
    return i;
    }

    ostream & operator

    sb July 4th, 2021 at 11:58 pm回复
  2. Yanhong Li

    #“查看评论区”的功能有点小问题 bit-comments点过就不会变成中文了

    Yanhong Li July 8th, 2021 at 08:39 pm回复
    1. yizuodi

      感谢反馈 已修复~

      yizuodi November 21st, 2021 at 10:20 pm回复