1-Point&Circle
#include <iostream>
using namespace std;
#include <math.h>
class Point
{
double x, y;
public:
Point()
{
x = 0;
y = 0;
}
Point(double x_value, double y_value)
{
x = x_value;
y = y_value;
}
void setXY(double xx,double yy){x=xx;y=yy;}
double getX(double x) { return x; }
double getY(double y) { return y; }
double getDisTo(Point &p)
{
double dis;
dis = sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
return dis;
}
~Point() {}
};
class Circle
{
Point centre;
double radius;
public:
Circle() {}
Circle(double x, double y, double r)
{
centre.getX(x);
centre.getY(y);
radius = r;
}
void moveCentreTo(double x1, double y1)
{
centre.setXY(x1,y1);
}
int contain(Point &p)
{
if (radius >= centre.getDisTo(p))
return 1;
else
return 0;
}
};
int main()
{
int x, y, r, t, a[100], b[100];
cin >> x >> y >> r;
cin >> t;
Circle C0(x, y, r);
for (int i = 0; i < t; i++)
{
int x1, y1;
cin >> x1 >> y1;
a[i] = x1;
b[i] = y1;
Point P(x1, y1);
if (C0.contain(P))
cout << "inside" << endl;
else
cout << "outside" << endl;
}
cout << "after move the centre of circle:" << endl;
cin >> x >> y;
C0.moveCentreTo(x, y);
for (int i = 0; i < t; i++)
{
Point P(a[i], b[i]);
if (C0.contain(P))
cout << "inside" << endl;
else
cout << "outside" << endl;
}
}
2-complex
#include <iostream>
using namespace std;
class complex
{
int real;
int xu;
public:
complex()
{
real = 1;
xu = 1;
}
complex(int a, int b)
{
real = a;
xu = b;
}
complex add(const complex &c)
{
complex sum;
sum.real = c.real + real;
sum.xu = c.xu + xu;
return sum;
}
complex substract(const complex &c)
{
complex sum;
sum.real = real - c.real;
sum.xu = xu - c.xu;
return sum;
}
void print()
{
if (!real)
cout << real;
if (xu == 1)
cout << "i" << endl;
else if (xu == 0)
cout << endl;
else if (xu > 0)
cout << "+" << xu << "i" << endl;
else
cout << xu << "i" << endl;
};
};
int main()
{
int t;
cin>>t;
while (t--)
{
int a, b, c, d;
cin >> a >> b >> c >> d;
complex c0(a, b);
complex c1(c, d);
c0.add(c1);
cout << "sum:";
c0.print();
complex c2(a, b);
complex c3(c, d);
c2.substract(c3);
cout << "remainder:";
c2.print();
}
}
3-电话号码升位
//找不到这几道的代码了,看最后的老师的代码了orz
4-身份证设定
5-软件备份
6-购物车
//老师的代码
#include<iostream>
#include<cmath>
using namespace std;
const double pi=3.1415;
class Point
{
double x,y;
public:
Point():x(0),y(0){}
Point(double x_value,double y_value):x(x_value),y(y_value){}
double getX(){return x;}
double getY(){return y;}
void setXY(double x1,double y1){x=x1;y=y1;}
void setX(double x_value){x=x_value;}
void setY(double y_value){y=y_value;}
double getDisTo(Point &p){return sqrt(pow((x-p.x),2)+pow((y-p.y),2));}
};
class Circle{
Point centre;
double radius;
public:
Circle():centre(0,0),radius(1){}
Circle(double x,double y,double r):centre(x,y),radius(r){}
double getArea(){return pow(radius,2)*pi;}
void moveCentreTo(double x1,double y1){centre.setXY(x1,y1);}
void contain(Point &p){
double d=centre.getDisTo(p);
if(d<=radius)
cout<<"inside"<<endl;
else
cout<<"outside"<<endl;
}
};
int main(){
double x,y,r;
cin>>x>>y>>r;
Circle c(x,y,r);
int n;
cin>>n;
Point *p=new Point[n];
for(int i=0;i<n;i++){
cin>>x>>y;
p[i].setXY(x,y);
c.contain(p[i]);
}
cin>>x>>y;
c.moveCentreTo(x,y);
cout<<"after move the centre of circle:"<<endl;
for(int i=0;i<n;i++)
c.contain(p[i]);
delete[] p;
}
=================================================
#include<iostream>
#include<cmath>
using namespace std;
class CComp
{
double a, b;
public:
CComp(): a(1), b(1) {}
CComp(double _a, double _b): a(_a), b(_b) {}
void add(CComp& c);
void sub(CComp& c);
void print();
};
void CComp::add(CComp& c)
{
CComp ret(a+c.a, b+c.b);
cout<<"sum:";
ret.print();
}
void CComp::sub(CComp& c)
{
CComp ret(a-c.a, b-c.b);
cout<<"remainder:";
ret.print();
}
void CComp::print()
{
if(a)
{
cout<<a;
if(b>0)
cout<<"+";
}
if(b)
{
if(abs(b)!=1)
cout<<b;
if(b==-1)
cout<<"-";
cout<<"i";
}
if(!a && !b)
cout<<0;
cout<<endl;
}
int main()
{
int t, a, b, c, d;
cin>>t;
while(t--)
{
cin>>a>>b>>c>>d;
CComp c1(a, b), c2(c, d);
c1.add(c2);
c1.sub(c2);
}
return 0;
}
====================================
///用字符指针表示字符串
#include<iostream>
#include<cstring>
using namespace std;
class CTelNumber{
char *s;
public:
CTelNumber(char *s1){
s=new char [strlen(s1)+1];
strcpy(s,s1);
}
CTelNumber (CTelNumber &n){
if(judge(n.s)){
s=new char[strlen(n.s)+2];
char c=n.s[0];
if(c>='2' && c<='4')
s[0]='8';
else if(c>='5' && c<='8')
s[0]='2';
for(int i=0;i<7;i++)
s[i+1]=n.s[i];
s[8]='\0';
cout<<s<<endl;
}
else{
s=0;
cout<<"Illegal phone number"<<endl;
}
}
bool judge(char* s){
if(strlen(s)!=7)
return false;
else if(s[0]<'2' || s[0]>'8')
return false;
else{
for(int i=0;i<7;i++){
if(!isdigit(s[i]))
return false;
}
return true;
}
}
~CTelNumber(){
if(s)
delete[] s;
}
};
int main()
{
int t;
char s[10];
cin>>t;
while(t--)
{
cin>>s;
CTelNumber t1(s);
CTelNumber t2(t1);
}
return 0;
}
///
用string表示电话号码
#include<iostream>
#include<cstring>
using namespace std;
class CTelNumber{
string s;
public:
CTelNumber(string s1){
s=s1;
}
CTelNumber (CTelNumber &n){
if(judge(n.s)){
char c=n.s[0],k;
if(c>='2' && c<='4')
k='8';
if(c>='5' && c<='8')
k='2';
s=k+n.s;
cout<<s<<endl;
}
else
cout<<"Illegal phone number"<<endl;
}
bool judge(string s){
if(s.length()!=7)
return false;
else if(s[0]<'2' || s[0]>'8')
return false;
else{
for(int i=0;i<7;i++){
if(!isdigit(s[i]))
return false;
}
}
return true;
}
};
int main()
{
int t;
string s;
cin>>t;
while(t--)
{
cin>>s;
CTelNumber t1(s);
CTelNumber t2(t1);
}
return 0;
}
=============================================
/用string
#include <bits/stdc++.h>
using namespace std;
class date
{
int y,d,m;
public:
date(){}
date(int y1,int m1,int d1):y(y1),m(m1),d(d1){}
int getyear(){return y;}
int getmonth(){return m;}
int getday(){return d;}
};
class PID
{
int type;
string id;
date cdate;
public:
PID(int t,string _id,int _y,int _m,int _d):type(t),id(_id),cdate(_y,_m,_d){}
PID(PID& p):type(p.type),id(p.id),cdate(p.cdate){
if(type==1){
type=2;
if(cdate.getyear()>=2000)
id.insert(6,"20");
else
id.insert(6,"19");
/*
stringstream sstr; //年份也可以这样处理,通用性更强一点,需要万能头文件。
string s;
sstr << cdate.getyear();
sstr>>s;
id.replace(6,2,s);
*/
int i,n=0;
for(i=0;i<17;i++)
n+=(id[i]-'0');
n=n%10;
if(n==0)
id+='X';
else
{n+='0';id+=n;}
}
}
void print()
{
cout << "type=2 birth=" <<cdate.getyear() << "."
<< setw(2) << setfill('0')<<cdate.getmonth() << "."
<< setw(2) << setfill('0')<< cdate.getday() << endl;
cout << "ID=" << id << endl;
}
};
int main()
{
int type;
string id;
int y,m,d,i,t;
cin >> t;
while(t--)
{
cin >> type>>id>>y>>m>>d;
PID p1(type,id,y,m,d);
PID p2(p1);
p2.print();
}
return 0;
}
//
//用字符数组
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
class date
{
int y,d,m;
public:
date(){}
date(int y1,int m1,int d1):y(y1),m(m1),d(d1){}
int getyear(){return y;}
int getmonth(){return m;}
int getday(){return d;}
};
class PID
{
int type;
char id[19];
date cdate;
public:
PID(int t,char _id[],int _y,int _m,int _d):type(t),cdate(_y,_m,_d)
{
strcpy(id,_id);
}
PID(PID& p):type(p.type),cdate(p.cdate){
strcpy(id,p.id);
int i,n=0;
if(type==1){
type=2;
for(i=16;i>7;i--)
id[i]=id[i-2];
if(cdate.getyear()>=2000)
{
id[6]=2+'0';
id[7]=0+'0';
}
else
{
id[6]=1+'0';
id[7]=9+'0';
}
for(i=0;i<17;i++)
n+=(id[i]-'0');
n=n%10;
if(n==0)
id[17]='X';
else
id[17]=n+'0';
id[18]='\0';
}
}
void print()
{
cout << "type=2 birth=" <<cdate.getyear() << "."
<< setw(2) << setfill('0')<<cdate.getmonth() << "."
<< setw(2) << setfill('0')<< cdate.getday() << endl;
cout << "ID=" << id << endl;
}
};
int main()
{
int type;
char id[19];
int y,m,d,i,t;
cin >> t;
while(t--)
{
cin >> type>>id>>y>>m>>d;
PID p1(type,id,y,m,d);
PID p2(p1);
p2.print();
}
return 0;
}
=========================================
#include<iostream>
using namespace std;
class CDate
{
int year, month, day;
public:
CDate(int y, int m, int d):year(y),month(m),day(d) { }
bool isLeapYear(int y) { return (y%4 == 0 && y%100 != 0) || y%400 == 0; }
double getDayofYear()
{
double sum=0;
if(cmp()){ //若日期大于2015-4-7日
int i;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//计算距离2015-1-1之间有多少天
sum+=day;
if (isLeapYear(year))
a[2]=29;
for(i=1; i<month; i++)
sum+=a[i];
for(i=2015;i<year;i++){
if (isLeapYear(i))
sum+=366;
else
sum+=365;
}
}
return sum;
}
bool cmp(){ //判断日期是否>2015-4-7
if(year!=2015) return year>2015;
if(month!=4) return month>4;
return day>7;
}
bool isZero(){ //判断日期是否等于0-0-0
return (year==0 && month==0 && day==0);
}
};
class CSoft
{
char type, store;
string name;
CDate ED;
public:
CSoft(string n, char t ,char s, int y,int m,int d):name(n),type(t),store(s),ED(y,m,d){}
CSoft(CSoft &x):name(x.name), type('B'),store('H'), ED(x.ED) {}
void print()
{
cout<<"name:"<<name<<endl;
cout<<"type:";
switch(type)
{
case 'O': cout<<"original"<<endl; break;
case 'T': cout<<"trial"<<endl; break;
case 'B': cout<<"backup"<<endl; break;
}
cout<<"media:";
switch(store)
{
case 'D': cout<<"optical disk"<<endl; break;
case 'H': cout<<"hard disk"<<endl; break;
case 'U': cout<<"USB disk"<<endl; break;
}
cout<<"this software ";
if(ED.isZero()) //若日期为0-0-0
cout<<"has unlimited use"<<endl;
else
{
double d=ED.getDayofYear(); //返回的是距离2015-1-1有多少天,2015-4-7距离2015-1-1是97天。当日期小于2015-4-7时返回0
if(d==0)
cout<<"has expired"<<endl;
else
cout<<"is going to be expired in "<<d-97<<" days"<<endl;
}
cout<<endl;
}
};
int main()
{
int t, y, m, d;
char ty, s;
string n;
cin>>t;
while(t--)
{
cin>>n>>ty>>s>>y>>m>>d;
CSoft s1(n,ty,s,y,m,d), s2(s1);
s1.print();
s2.print();
}
return 0;
}
============================================
一、使用链表结构:
#include<iostream>
using namespace std;
#include<iomanip>
class good{
string id,name,color,size;
double danjia;
int num;
public:
good(){};
good(string id1,string name1,string color1,string size1,double danjia1,int num1)
{id=id1;name=name1;color=color1;size=size1;danjia=danjia1;num=num1;}
void display()
{cout<<name<<","<<color<<","<<size<<","<<fixed<<setprecision(2)<<danjia<<","<<num<<","<<fixed<<setprecision(2)<<getsum()<<endl;}
string getid(){return id;}
int getnum(){return num;}
double getsum(){return danjia*num;}
void numplus(){
num++;
}
void numsub(){
num--;
}
void numplus1(int _num){
num+=_num;
}
};
struct Node{
good data;
Node* next;
};
class car{
Node* head;
public:
car(){head=new Node;head->next=NULL;}
void insertNode(good value){
Node* s=new Node;
s->data=value;
s->next=head->next;
head->next=s;
}
Node* findNode(string id){
Node* p=head->next;
while(p){
if(p->data.getid()==id)
return p;
p=p->next;
}
return NULL;
}
void deleteNode(string id){
Node* p=head;
while(p->next){
if(p->next->data.getid()==id){
p->next=p->next->next;
break;
}
p=p->next;
}
}
void add(string _id,string _name,string _color,string _size,double _danjia,int _num)
{ Node* p=findNode(_id);
if(!p){
good value(_id,_name,_color,_size,_danjia,_num);
insertNode(value);
}
else
p->data.numplus1(_num);
}
void up(string _id){
Node* p=findNode(_id);
if(p)
p->data.numplus();
}
void down(string _id){
Node* p=findNode(_id);
if(p){
if(p->data.getnum()>1){
p->data.numsub();
}
}
}
void display(){
double sum=0;
int count=0;
Node* p=head->next;
cout<<"商品清单:"<<endl;
cout<<"商品,颜色,尺码,单价,数量,小计"<<endl;
while(p){
p->data.display();
count+=p->data.getnum();
sum+=p->data.getsum();
p=p->next;
}
cout<<"----------"<<endl;
cout<<count<<"件商品,总商品金额"<<fixed<<setprecision(2)<<sum<<endl;
}
};
int main() {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string operate,id,name,color,size;
int num;
double danjia;
car c;
while(n--){
cin>>operate;
if(operate=="ADD"){
cin>>id>>name>>color>>size>>danjia>>num;
c.add(id,name,color,size,danjia,num);
}
else if(operate=="UP"){
cin>>id;
c.up(id);
}
else if(operate=="DOWN"){
cin>>id;
c.down(id);
}
else if(operate=="DELETE"){
cin>>id;
c.deleteNode(id);
}
}
c.display();
}
return 0;
}
//
二、使用数组:
#include<iostream>
using namespace std;
#include<iomanip>
class good{
string id,name,color,size;
double danjia;
int num;
public:
good(){}
void set(string id1,string name1,string color1,string size1,double danjia1,int num1)
{id=id1;name=name1;color=color1;size=size1;danjia=danjia1;num=num1;}
void display()
{cout<<name<<","<<color<<","<<size<<","<<fixed<<setprecision(2)<<danjia<<","<<num<<","<<fixed<<setprecision(2)<<getsum()<<endl;}
string getid(){return id;}
int getnum(){return num;}
double getsum(){return danjia*num;}
void numplus(){
num++;
}
void numsub(){
num--;
}
void numplus1(int _num){
num+=_num;
}
};
class car{
good g[100];
int i;//记录有效数据个数
public:
car():i(0){}
void add(string _id,string _name,string _color,string _size,double _danjia,int _num)//商品若存在,改数量;否则加到数组最前面
{ int j,k;
for(j=0;j<i;j++){
if(_id==g[j].getid()){
g[j].numplus1(_num);
return ;
}
}
if(j==i){
for(k=i-1;k>=0;k--)
g[k+1]=g[k];
g[0].set(_id,_name,_color,_size,_danjia,_num);
i++;
}
}
void ddelete(string _id){
int j,k;
for(j=0;j<i;j++){
if(_id==g[j].getid()){
for(k=j;k<i-1;k++)
g[k]=g[k+1];
i--;
break;
}
}
}
void up(string _id){
int j;
for(j=0;j<i;j++){
if(_id==g[j].getid()){
g[j].numplus();
break;
}
}
}
void down(string _id){
int j;
for(j=0;j<i;j++){
if(_id==g[j].getid()){
if(g[j].getnum()>1){
g[j].numsub();
break;
}
}
}
}
void display(){
double sum1=0;
int num1=0;
int j;
cout<<"商品清单:"<<endl;
cout<<"商品,颜色,尺码,单价,数量,小计"<<endl;
for(j=0;j<i;j++){
sum1+=g[j].getsum();
num1+=g[j].getnum();
g[j].display();
}
cout<<"----------"<<endl;
cout<<num1<<"件商品,总商品金额"<<fixed<<setprecision(2)<<sum1<<endl;
}
};
int main() {
int t;
cin>>t;
while(t--){
int n;
cin>>n;
string operate,id,name,color,size;
int num;
double danjia;
car c;
while(n--){
cin>>operate;
if(operate=="ADD"){
cin>>id>>name>>color>>size>>danjia>>num;
c.add(id,name,color,size,danjia,num);
}
else if(operate=="UP"){
cin>>id;
c.up(id);
}
else if(operate=="DOWN"){
cin>>id;
c.down(id);
}
else if(operate=="DELETE"){
cin>>id;
c.ddelete(id);
}
}
c.display();
}
return 0;
}