您的位置:首页 > 其它

PTA第二次作业

2016-05-29 16:14 204 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: