1-三维坐标点的平移
#include<iostream>
#include<iomanip>
using namespace std;
class point
{
int x;
int y;
int z;
public:
point()
{
x = 0; y = 0; z = 0;
}
point(int a,int b,int c):x(a),y(b),z(c){}
void setpoint(point &a) {
x = a.x; y = a.y; z = a.z;
}
friend point& operator ++(point& a) {
a.x++;
a.y++;
a.z++;
return a;
}
friend point operator ++(point& a, int) {
point temp(a);
a.x++;
a.y++;
a.z++;
return temp;
}
friend point& operator --(point& a) {
a.x--;
a.y--;
a.z--;
return a;
}
friend point operator --(point& a, int) {
point temp(a);
a.x--;
a.y--;
a.z--;
return temp;
}
void show() {
cout << "x=" << x << " y=" << y << " z=" << z << endl;
}
};
int main() {
int x, y, z;
cin >> x >> y >> z;
point p(x, y, z);
point p1(p);
p1++;
p1.show();
p1.setpoint(p);
point p2(p1++);
p2.show();
p1.setpoint(p);
(++p1).show();
p1.setpoint(p);
point p3(++p1);
p3.show();
p1.setpoint(p);
p1--;
p1.show();
p1.setpoint(p);
point p4(p1--);
p4.show();
p1.setpoint(p);
(--p1).show();
p1.setpoint(p);
point p5(--p1);
p5.show();
}
2-矩阵相加
#include<iostream>
#include<iomanip>
using namespace std;
class matrix
{
int m, n;
int** data;
public:
matrix() { m = 0; n = 0; data = NULL; }
matrix(int m1, int n1) {
m = m1;
n = n1;
data = new int* [m];
for (int i = 0; i < m; i++) {
data[i] = new int[n];
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++)
{
cin >> data[i][j];
data[i][j] = data[i][j];
}
}
}
matrix& operator +(matrix& a) {
for (int i = 0; i < m; i++) {
for (int j = 0; i < n; j++) {
a.data[i][j] += data[i][j];
}
}
return a;
}
void show() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; i++) {
if (j == n - 1) cout << data[i][j] << endl;
else cout << data[i][j] << " ";
}
}
}
~matrix() { if (data != NULL) delete[]data; }
};
int main() {
int t, m, n;
cin >> t;
while (t--) {
cin >> m >> n;
matrix m1(m, n);
cin >> m >> n;
matrix m2(m, n);
(m1 + m2).show();
}
}
3-字符串比较
//#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
#include<string>
#include<string.h>
using namespace std;
class str {
char* p;
public:
str() { p = NULL; }
str(char* s){
p = new char[strlen(s) + 1];
strcpy(p, s);
}
friend bool operator >(str& a, str& b) {
if (strcmp(a.p, b.p)>0) return 1;
else return 0;
}
friend bool operator ==(str& a, str& b) {
if (!strcmp(a.p, b.p)) return true;
else return false;
}
friend bool operator <(str& a, str& b) {
if (strcmp(a.p, b.p) < 0) return true;
else return false;
}
~str() { if (p != NULL) delete p; }
void show() {
cout << p << endl;
}
};
int main() {
char p1[100], p2[100], p3[100];
cin.getline(p1,100);
cin.getline(p2,100);
cin.getline(p3,100);
str s1(p1);
str s2(p2);
str s3(p3);
if (s1 > s2) s1.show();
else s2.show();
if (s1 < s3) s1.show();
else s3.show();
if (s2 == s3) s2.show();
else s3.show();
}
4- 四进制加法
#include<iostream>
using namespace std;
#include<cmath>
class quartnary
{
int num;
public:
quartnary() { num = 0; }
quartnary(int m) :num(m) {}
void set(int a) { num = a; }
quartnary& operator +(quartnary& a) {
int sum, s, n = 0, _sum = 0;
sum = num + a.num;
s = sum;
while (s) {
s= s/ 10;
n++;
}
for (int i = 0; i < n + 1; i++) {
if (sum % 10 >= 4)
sum = (sum / 10 + 1) * 10 + sum % 10 - 4;
_sum += sum % 10 * pow(10, i);
sum /= 10;
}
num = _sum;
return *this;
}
void show() { cout << num << endl; }
};
int main() {
int t, num;
cin >> t ;
quartnary* p;
quartnary a;
p = new quartnary[t];
for(int i=0;i<t;i++){
cin >> num;
p[i].set(num);
}
for (int i = 0; i < t; i++) {
a = a + p[i];
}
a.show();
}
5-学生生日差值计算
#include<iostream>
using namespace std;
#include<string>
#include<stdlib.h>
class Student
{
string name;
int year;
int month;
int day;
public:
Student(){}
void set(string n, int a, int b, int c) { name = n; year = a; month = b; day = c; }
Student(string n,int a,int b,int c ):name(n),year(a),month(b),day(c){}
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int judge(int y)
{
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
days[2] = 29;
return 366;
}
else {
days[2] = 28;
return 365;
}
}
int operator -(Student& s) {
int startyear = year < s.year ? year : s.year;
int sum1 = day,sum2=s.day;
for (int i = startyear; i < year; i++) {
sum1 +=judge(i);
}
judge(year);
for (int i = 1; i < month; i++) {
sum1 += days[i];
}
for (int i = startyear; i < s.year; i++) {
sum2 += judge(i);
}
judge(s.year);
for (int i = 1; i < month; i++)
sum2 += days[i];
return sum1 - sum2;
}
string getname() { return name; }
};
int main() {
int t,year,month,day;
string name;
cin >> t;
Student *S = new Student[t];
Student s1;
for (int i = 0; i < t; i++) {
cin >> name >> year >> month >> day;
S[i].set(name, year, month, day);
}
int m=0, n=0,max=0;
for (int i = 0; i < t; i++) {
for (int j = i + 1; j < t; j++)
{
if (abs(S[i] - S[j]) > max) {
max = abs(S[i] - S[j]);
m = i; n = j;
}
}
}
if (m > n) { int t = m; m = n; n = t; }
cout << S[m].getname() << "和" << S[n].getname() << "年龄相差最大,为" << abs(S[m] - S[n]) << "天。" << endl;
}
//#include<iostream>
//#include<iomanip>
//using namespace std;
//
//class Date {
// int year, month, day;
// int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//public:
// Date(int y = 0, int m = 0, int d = 0) :year(y), month(m), day(d) {}
// void judge1(int y) {
// if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
// days[2] = 29;
// else
// days[2] = 28;
// }
// long judge2(int y) {
// if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
// return 366;
// else
// return 365;
// }
// Date operator+(int d) {
// Date t(*this);
// d += t.day;
// judge1(t.year);
// while (d > days[t.month]) {
// d -= days[t.month];
// t.month++;
// if (t.month == 13) {
// t.month = 1;
// t.year++;
// judge1(t.year);
// }
// }
// t.day = d;
// return t;
// }
// Date operator-(int d) {
// Date t(*this);
// d = t.day - d;
// judge1(t.year);
// while (d <= 0) {
// t.month--;
// if (t.month == 0) {
// t.month = 12;
// t.year--;
// judge1(t.year);
// }
// d += days[t.month];
// }
// t.day = d;
// return t;
// }
// long operator-(const Date& date) {
// int startyear = year < date.year ? year : date.year;
//
// long sum1 = day;
// for (int i = startyear; i < year; i++)
// sum1 += judge2(i);
// judge1(year);
// for (int i = 1; i < month; i++)
// sum1 += days[i];
//
// long sum2 = date.day;
// for (int i = startyear; i < date.year; i++)
// sum2 += judge2(i);
// judge1(date.year);
// for (int i = 1; i < date.month; i++)
// sum2 += days[i];
//
// return sum1 - sum2;
// }
// void print() {
// cout << year << "-" << setfill('0') << setw(2) << month << "-" << setfill('0') << setw(2) << day << endl;
// }
//};
//
//int main() {
// Date d1(2022, 12, 31), d2(2022, 1, 1), d3;
// d3 = d1 + 1;
// d3.print();
// d3 = d2 - 1;
// d3.print();
// cout << d1 - d2 << endl;
//}
6-时钟调整
#include<iostream>
using namespace std;
#include<string>
#include<stdlib.h>
class clo
{
int hour;
int minute;
int second;
public:
clo(){}
clo(int h,int m,int s):hour(h),minute(m),second(s){}
clo& operator++() {
if (second == 59) {
second = 0;
if (minute == 59) {
minute = 0;
if (hour == 11)
hour = 0;
else hour += 1;
}
else
minute += 1;
}
else second += 1;
return *this;
}
clo operator --(int) {
if (second == 0) {
second = 59;
if (minute == 0) {
minute = 59;
if (hour == 0)
hour = 59;
else hour -= 1;
}
else minute -= 1;
}
else second -= 1;
return *this;
}
void show() {
cout << hour << ":" << minute << ":" << second << endl;
}
};
int main() {
int hour, minute, second,t,time;
cin >> hour >> minute >> second;
clo c(hour, minute, second);
cin >> t;
while (t--) {
cin >> time;
if (time > 0) while (time--) ++c;
else if (time < 0) while (abs(time)) { c--; time--; }
c.show();
}
}
//老师的代码
#include <iostream>
using namespace std;
class point{
int x,y,z;
public:
point(int x=0,int y=0,int z=0):x(x),y(y),z(z){}
friend point operator++(point& a){
++a.x;
++a.y;
++a.z;
return a;
}
friend point operator++(point& a,int){
point p(a);
a.x++;
a.y++;
a.z++;
return p;
}
friend point operator--(point& a){
--a.x;
--a.y;
--a.z;
return a;
}
friend point operator--(point& a,int){
point p(a);
a.x--;
a.y--;
a.z--;
return p;
}
void show(){
cout<<"x="<<x<<" y="<<y<<" z="<<z<<endl;
}
};
int main(){
int x,y,z;
cin>>x>>y>>z;
point p(x,y,z),p1,p2;
p1=p;
p2=p1++;
p1.show();
p2.show();
p1=p;
p2=++p1;
p1.show();
p2.show();
p1=p;
p2=p1--;
p1.show();
p2.show();
p1=p;
p2=--p1;
p1.show();
p2.show();
}
====================================================================================
#include <iostream>
using namespace std;
class Cmatrix
{
private:
int m, n, **data;
public:
Cmatrix(int m1, int n1): m(m1), n(n1){
data=new int*[m];
for(int i=0; i<m; ++i){
data[i]=new int[n];
for(int j=0; j<n; ++j)
cin>>data[i][j];
}
}
Cmatrix(const Cmatrix &x): m(x.m), n(x.n){
data=new int*[m];
for(int i=0; i<m; ++i){
data[i]=new int[n];
for(int j=0; j<n; ++j)
data[i][j]=x.data[i][j];
}
}
void print() const
{
for(int i=0; i<m; ++i)
for(int j=0; j<n; ++j)
cout<<data[i][j]<<(j==n-1 ? "\n" : " ");
}
Cmatrix operator+(const Cmatrix &x)
{
Cmatrix c(*this);
for(int i=0; i<m; ++i)
for(int j=0; j<n; ++j)
c.data[i][j]+=x.data[i][j];
return c;
}
~Cmatrix(){
for(int i=0; i<m; i++ )
delete []data[i];
delete []data;
}
};
int main()
{
int t, m, n;
cin>>t;
while(t--)
{
cin>>m>>n;
Cmatrix x1(m, n);
Cmatrix x2(m, n);
(x1+x2).print();
}
return 0;
}
====================================================================================
一、按题目要求,使用字符指针处理字符串
#include<iostream>
#include<cstring>
using namespace std;
class str{
char *p;
public:
str(){p=new char[30];}
str(char *s){p=new char[strlen(s)+1];strcpy(p,s);}
friend bool operator>(str &,str &);
friend bool operator<(str &,str &);
friend bool operator==(str &,str &);
void show(){cout<<p<<endl;}
};
bool operator>(str &a,str &b){
if(strcmp(a.p,b.p)>0){
return true;
}
return false;
}
bool operator<(str &a,str &b){
if(strcmp(a.p,b.p)<0){
return true;
}
return false;
}
bool operator==(str &a,str &b){
if(strcmp(a.p,b.p)==0){
return true;
}
return false;
}
int main()
{ int len=30;
char p[len];
cin.getline(p,len);
str A(p);
cin.getline(p,len);
str B(p);
cin.getline(p,len);
str C(p);
if(A>B)
A.show();
else
B.show();
if(A<C)
A.show();
else
C.show();
if(B==C)
B.show();
else
C.show();
return 0;
}
二、用string处理字符串
#include<iostream>
#include<cstring>
using namespace std;
class str{
string p;
public:
str(){}
str(string s){p=s;}
friend bool operator>(str &,str &);
friend bool operator<(str &,str &);
friend bool operator==(str &,str &);
void show(){cout<<p<<endl;}
};
bool operator>(str &a,str &b){
if(a.p>b.p){
return true;
}
return false;
}
bool operator<(str &a,str &b){
if(a.p<b.p){
return true;
}
return false;
}
bool operator==(str &a,str &b){
if(a.p==b.p){
return true;
}
return false;
}
int main()
{
string p;
getline(cin,p);
str A(p);
getline(cin,p);
str B(p);
getline(cin,p);
str C(p);
if(A>B)
A.show();
else
B.show();
if(A<C)
A.show();
else
C.show();
if(B==C)
B.show();
else
C.show();
return 0;
}
====================================================================================
#include <iostream>
using namespace std;
class Number{
int value;
public:
Number(int n):value(n){}
void operator+(const Number& a){
int x,y,temp,result=0,jinwei=0,quanzhi=1;
x=value;
y=a.value;
while(x+y+jinwei){
temp=(x%10)+(y%10)+jinwei;
if(temp>=4){
jinwei=1;
temp-=4;
}
else
jinwei=0;
result+=temp*quanzhi;
quanzhi*=10;
x/=10;
y/=10;
}
value=result;
}
void show(){cout<<value;}
};
int main(){
int t,x;
cin>>t;
cin>>x;
Number temp(x);
while(--t){
cin>>x;
Number a(x);
temp+a;
}
temp.show();
}
====================================================================================
一、利用sort排序:
#include<iostream>
#include<algorithm>
using namespace std;
class Student;
class Date
{
int year,month,day;
public:
Date(int y=0,int m=0,int d=0):year(y),month(m),day(d){}
void setData(int y,int m,int d){
year=y;
month=m;
day=d;
}
int isLeap(int y)const{
if((y%400==0)||(y%4==0&&y%100!=0))
return 1;
return 0;
}
int sumOfMonth(int y,int m)const
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(m==2)
month[2]=29;
return month[m];
}
int sumOfDay(int y) const //y表示年份,计算与y-1-1之间相隔的天数
{
int i,j;
int sum=day;
for( i=y; i<year; i++ )
sum+=365+isLeap(i);
for( i=1; i<month; i++ )
sum+=sumOfMonth(year,i);
return sum;
}
int getyear()const{return year;}
};
class Student
{
string name;
Date date;
public:
Student(string n="",int y=0,int m=0,int d=0):date(y,m,d),name(n){}
void setData(string n,int y,int m,int d){
name=n;
date.setData(y,m,d);
}
string getName(){
return name;
}
friend int operator - (const Student& s1, const Student& s2){
int y1=s1.date.getyear(),y2=s2.date.getyear(),y;
y=(y1<y2)?y1:y2; //获得日期s1,s2中较小的年份
return s1.date.sumOfDay(y)-s2.date.sumOfDay(y);
}
};
bool cmp(const Student& s1, const Student& s2) {
if(s1-s2<0)
return true;
return false;
}
int main()
{
int t,year,month,day;
string name;
cin>>t;
Student stu[t];
for(int i=0;i<t;i++){
cin>>name>>year>>month>>day;
stu[i].setData(name,year,month,day);
}
sort(stu,stu+t,cmp);
int maxOfNum=stu[t-1]-stu[0];
cout<<stu[0].getName()<<"和"<<stu[t-1].getName()<<"年龄相差最大,为"<<maxOfNum<<"天。"<<endl;
return 0;
}
//
二、自己手动排序
#include<iostream>
using namespace std;
class Date
{
int year,month,day;
public:
Date(int y=0,int m=0,int d=0):year(y),month(m),day(d){}
void setData(int y,int m,int d){
year=y;
month=m;
day=d;
}
int isLeap(int y){
if((y%400==0)||(y%4==0&&y%100!=0))
return 1;
return 0;
}
int sumOfMonth(int y,int m)
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(m==2)
month[2]=29;
return month[m];
}
int sumOfDay() //比较和1900-1-1之间相隔的天数
{
int i,j;
int sum=day;
for( i=1990; i<year; i++ )
sum+=365+isLeap(i);
for( i=1; i<month; i++ )
sum+=sumOfMonth(year,i);
return sum;
}
};
class Student
{
string name;
Date date;
public:
Student(string n="",int y=0,int m=0,int d=0):date(y,m,d),name(n){}
void setData(string n,int y,int m,int d){
name=n;
date.setData(y,m,d);
}
int operator - (Student &s){
return abs(date.sumOfDay()-s.date.sumOfDay());
}
string getName(){
return name;
}
};
int main()
{
int t,i,j;
int maxi,maxj,maxOfNum=0,year,month,day;
string name;
cin>>t;
Student *stu=new Student[t];
for(i=0;i<t;i++){
cin>>name>>year>>month>>day;
stu[i].setData(name,year,month,day);
}
for(i=0;i<t;i++){ //穷举法
for(j=i+1;j<t;j++){
if(stu[i]-stu[j]>maxOfNum){
maxOfNum=stu[i]-stu[j];
maxi=i;
maxj=j;
}
}
}
cout<<stu[maxi].getName()<<"和"<<stu[maxj].getName()<<"年龄相差最大,为"<<maxOfNum<<"天。"<<endl;
return 0;
}
====================================================================================
#include <iostream>
using namespace std;
class Clock
{
int h,m,s;
public:
Clock(int h=0,int m=0,int s=0):h(h),m(m),s(s){}
Clock& operator++(){
s++;
if(s==60)
{ s=0;
m++;
if(m==60)
{ m=0;
h++;
if(h==12)
h=0;
}
}
return *this;
}
Clock& operator--(int)
{ s--;
if(s<0)
{ s=59;
m--;
if(m<0)
{ m=59;
h--;
if(h<0)
h=11;
}
}
return *this;
}
void print()
{
cout<<h<<":"<<m<<":"<<s<<endl;
}
};
int main()
{
int t,h,m,s,n;
cin>>h>>m>>s;
Clock a(h,m,s);
cin>>t;
while(t--)
{
cin>>n;
if(n>0){
for(int i=0;i<n;++i)
++a;
}
if(n<0){
for(int i=0;i<-n;++i)
a--;
}
a.print();
}
return 0;
}