PTA第二次作业
5-1
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
class myDate
{
private:
int year;
int mouth;
int day;
public:
myDate(int y,int m,int d):year(y),mouth(m),day(d){};
void display();
};
class myTime
{
private:
int hour;
int mini;
public:
myTime(int h,int min):hour(h),mini(min){};
void display();
};
void myDate::display()
{
printf("%04d/%02d/%02d ",year,mouth,day);
}
void myTime::display()
{
printf("%02d:%02d\n",hour,mini);
}
int main()
{
int y,m,d,h,min;
int i,j;
while(scanf("%d%d%d%d%d",&y,&m,&d,&h,&min) != EOF)
{
if(y == 0)break;
myDate Date(y,m,d);
myTime Time(h,min);
Date.display();
Time.display();
}
return 0;
}
5-2
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
using namespace std;
class calculate
{
public:
int s[105];
calculate()
{
memset(s,0,sizeof(s));
}
void found();
};
void calculate::found()
{
int l,r;
int i,j;
l = r = 1;
int tot = 0;
int cnt = 0;
for(i = 1; i <= 7; i++)//i左
{
cnt = 0;
for(j = i; j <= 7; j++)//j右
{
cnt += s[j];
if(cnt > tot)
{
tot = cnt;
l = i;
r = j;
}
else if(cnt == tot)
{
if(r - l <= j - i && tot == cnt)
//相等的时候 取区间范围比较小的
continue;
tot = cnt;
l = i;
r = j;
}
}
}
if(tot <= 0)
printf("won't buy!\n");
else
printf("%d %d %d\n",tot,l,r);
}
int main()
{
int i,j;
while(1)
{
calculate cal;
scanf("%d%d%d%d%d%d%d",&cal.s[1],&cal.s[2],&cal.s[3],
&cal.s[4],&cal.s[5],&cal.s[6],&cal.s[7]);
if(cal.s[1] == 0 && cal.s[2] == 0 && cal.s[3] == 0 && cal.s[4] == 0
&& cal.s[5] == 0 && cal.s[6] == 0 && cal.s[7] == 0)break;
cal.found();
}
return 0;
}
//-1 -1 1 -1 1 -1 1
5-3
继承
#include <cstdio>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class Group
{
protected:
string name;//姓名
public:
virtual void display()=0;//显示考核成绩
};
//====
class Group_A : public Group
{
public:
int getscore;
void display();
Group_A(string s,int score):getscore(score){name = s;};
};
void Group_A::display()
{
cout << name << " " << 'A' << " " << getscore << endl;
}
//====
class Group_B : public Group
{
public:
int getscore;
void display();
Group_B(string s,int score):getscore(score){name = s;};
};
void Group_B::display()
{
cout << name << " " << 'B' << " " << getscore << endl;
}
//====
int cal_Ascore(string s,int len)
{
int i,j;
int win = 0;
int lose = 0;
int tot = 0;
string play;
stringstream stream;
for(i = 3 + len; i < s.length(); i++)
{
if(s[i] == ' ')
{
if(play != "")
{
stream << play;
stream >> win;
stream.clear();
play = "";
}
continue;
}
play += s[i];
}
if(play != "")
{
stream << play;
stream >> lose;
stream.clear();
}
tot = 2 * win - lose;
return tot;
}
int cal_Bscore(string s,int len)
{
int tot = 0;
int pre = 0;
int beh = 0;
int i,j;
string play;
stringstream stream;
for(i = 3 + len; i < s.length(); i++)
{
if(s[i] == ':')
{
stream << play;
stream >> pre;
stream.clear();
play = "";
continue;
}
else if(s[i] == ' ')
{
stream << play;
stream >> beh;
stream.clear();
if(pre > beh)
{
tot += pre - beh;
}
else if(pre < beh)
{
tot -= beh - pre;
}
pre = 0;
beh = 0;
play = "";
continue;
}
else
{
play += s[i];
}
}
if(play != "")
{
stream << play;
stream >> beh;
stream.clear();
if(pre > beh)
{
tot += pre - beh;
}
else if(pre < beh)
{
tot -= beh - pre;
}
}
return tot;
}
//====
int main()
{
Group *pg[20];
int cnt = 1;
int A_win;
int A_lose;
int i,j;
while(1)
{
string Gsta;
getline(cin,Gsta);
if(Gsta[0] == '0')break;
string name;
int namelen = 0;
int score = 0;
for(i = 2; i < Gsta.length(); i++)
{
if(Gsta[i] == ' ')break;
name += Gsta[i];
namelen ++;
}
if(Gsta[0] == 'A')
{
score = cal_Ascore(Gsta,namelen);
pg[cnt++] = new Group_A(name,score);
//Group_A A1(name,score);
//A1.display();
}
else if(Gsta[0] == 'B')
{
score = cal_Bscore(Gsta,namelen);
pg[cnt++] = new Group_B(name,score);
//Group_B B1(name,score);
//B1.display();
}
}
for(i = 1; i < cnt; i++)
{
pg[i] -> display();
}
return 0;
}
5-4
说好的顺序表写成了链表orz。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <string>
#define LEN sizeof(SeqList)
using namespace std;
struct SeqList
{
int data;
SeqList* next;
};
typedef SeqList* point;
point List_Creat(int tot)
{
point head;
point p1,p2;
head = (point)malloc(LEN);
if(head == NULL)
{
printf("Overflow\n");
exit(1);
}
head = NULL;
p1 = (point)malloc(LEN);
if(p1 == NULL)
{
printf("Overflow\n");
exit(1);
}
scanf("%d",&p1 -> data);
if(tot == 1)
{
head = p1;
head -> next = NULL;
return head;
}
for(int i = 1; i < tot; i++)
{
if(head == NULL)
{
head = p1;
}
else
{
p2 -> next = p1;
}
p2 = p1;
p1 = (point)malloc(LEN);
if(p1 == NULL)
{
printf("Overflow\n");
exit(1);
}
scanf("%d",&p1 -> data);
}
p2 -> next = p1;
p1 -> next = NULL;
return head;
}
point Print(point head)
{
point p;
p = head;
printf("%d",p -> data);
p = p -> next;
while(p != NULL)
{
printf(" %d",p -> data);
p = p -> next;
}
printf("\n");
}
point Insert(point head,int num)
{
point p,p1,p2;
p = (point)malloc(LEN);
if(p == NULL)
{
printf("Overflow\n");
exit(1);
}
p -> data = num;
p -> next = NULL;
p1 = p2 = head;
if(head -> data >= num)
{
p -> next = head;
head = p;
return head;
}
else
{
while(p1 -> next != NULL)
{
if(p1 -> data >= num)
{
break;
}
else
{
p2 = p1;
p1 = p1 -> next;
}
}
if(p1 -> next == NULL && p1 -> data < num)
{
p1 -> next = p;
p -> next = NULL;
}
else
{
p2 -> next = p;
p -> next = p1;
}
}
return head;
}
int main()
{
int t;
int i,j;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
point head;
head = List_Creat(n);
int i_data;
scanf("%d",&i_data);
head = Insert(head,i_data);
printf("size=%d:",n + 1);
Print(head);
}
return 0;
}
To improve is to change, to be perfect is to change often.