PTA第一次作业

5-5

#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;

struct Node
{
	int data;
	Node *next;
};

int tot = 0;

Node *Node_Creat()
{
	Node *head;
	head = (Node *)malloc(sizeof(Node));
	if(head == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	
	head = NULL;
	
	Node *p1,*p2;
	p1 = (Node *)malloc(sizeof(Node));
	if(p1 == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	scanf("%d",&p1 -> data);
	
	while(p1 -> data != -1)
	{
		if(p1 -> data % 2 == 0)
		{
			scanf("%d",&p1 -> data);
			continue;
		}
		
		tot++;
		
		if(head == NULL)
		{
			head = p1;
		}
		else
		{
			p2 -> next = p1;
		}
		
		p2 = p1;
		p1 = (Node *)malloc(sizeof(Node));
		if(p1 == NULL)
		{
			printf("Overflow\n");
			exit(1);
		}
		
		scanf("%d",&p1 -> data);
	}
	p2 -> next = NULL;
	
	return head;
}

void Node_Print(Node *head)
{
	Node *p;
	p = head;
	
	while(p -> next != NULL)
	{
		printf("%d ",p -> data);
		p = p -> next;
	}
	
	printf("%d",p -> data);
}

//没有用到 
Node *Node_Delete(Node *head,int num)
{
	Node *p1,*p2;
	
	p1 = p2 = head;
	
	if(num == 1)
	{
		tot--;
		head = head -> next;
		return head;
	}
	
	for(int i = 1; i < num; i++)
	{
		p2 = p1;
		p1 = p1 -> next;
	}
	
	p2 -> next = p1 -> next;
	tot--;
	
	free(p1);
	
	return head;
}

int main()
{
	Node *head;
	head = Node_Creat();
	
	Node_Print(head);
	
	return 0;
}

5-4

#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;

struct Node
{
	int data;
	Node *next;
};

int tot = 0;

Node *Node_Creat()
{
	Node *head;
	head = (Node *)malloc(sizeof(Node));
	if(head == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	
	head = NULL;
	
	Node *p1,*p2;
	p1 = (Node *)malloc(sizeof(Node));
	if(p1 == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	scanf("%d",&p1 -> data);
	
	while(p1 -> data != -1)
	{
		if(p1 -> data % 2 == 1)
		{
			scanf("%d",&p1 -> data);
			continue;
		}
		
		tot++;
		
		if(head == NULL)
		{
			head = p1;
		}
		else
		{
			p2 -> next = p1;
		}
		
		p2 = p1;
		p1 = (Node *)malloc(sizeof(Node));
		if(p1 == NULL)
		{
			printf("Overflow\n");
			exit(1);
		}
		
		scanf("%d",&p1 -> data);
	}
	p2 -> next = NULL;
	
	return head;
}

void Node_Print(Node *head)
{
	Node *p;
	p = head;
	
	if(head == NULL)return ;
	
	while(p -> next != NULL)
	{
		printf("%d ",p -> data);
		p = p -> next;
	}
	
	printf("%d\n",p -> data);
}

//还是没有用到 
Node *Node_Delete(Node *head,int num)
{
	Node *p1,*p2;
	
	p1 = p2 = head;
	
	if(num == 1)
	{
		tot--;
		head = head -> next;
		return head;
	}
	
	for(int i = 1; i < num; i++)
	{
		p2 = p1;
		p1 = p1 -> next;
	}
	
	p2 -> next = p1 -> next;
	tot--;
	
	free(p1);
	
	return head;
}

int main()
{
	Node *head;
	
	int repeat;
	scanf("%d",&repeat);
	int i,j;
	
	for(i = 1; i <= repeat; i++)
	{
		head = Node_Creat();
	
	    Node_Print(head);
	}
	
	return 0;
}

5-3

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

int store[1000005];

int s[1000005];

int main()
{
	int i,j;
	int l,r;
	scanf("%d%d",&l,&r);
	
	int tot = l;
	for(i = l; i <= r; i++)
	{
		for(j = 1; j <= sqrt(i); j++)
		{
			if(i % j == 0)store[i]++;
		}
		
		if(sqrt(i) * sqrt(i) == i)
		{
			store[i] = store[i]*2 - 1;
		}
		else
		{
			store[i] *= 2;
		}
		
		if(store[i] > store[tot])tot = i;
	}
	
	printf("[%d,%d] %d ",l,r,tot);
	
	int cnt = 1;
	for(i = 1; i <= tot; i++)
	{
		if(tot % i == 0)
		{
			s[cnt] = i;
			cnt++;
		}
	}
	
	printf("%d\n",--cnt);
	
	for(i = 1; i <= cnt; i++)
	{
		if(i != cnt)
		printf("%d ",s[i]);
		else
		printf("%d",s[i]);
	}
	
	return 0;
}

5-2

分文件写法:

student.h

#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
#include <string>
using namespace std;

class Student
{
	private:
		int height;
		int weight;
	public:
		string name;
		void creat();
		void cmp(string cmpname,int h,int w);
		void Print();
};

#endif // STUDENT_H

main.cpp

#include "student.h" // class's header file
#include <string>
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <cstdio>
using namespace std;

Student stu[1000005];

void Student::creat()
{
	if(height > 0)return ;
	
	height = 0;
	weight = 0;
}

void Student::cmp(string cmpname,int h,int w)
{
	if(h > height)
	{
		height = h;
		weight = w;
		name = cmpname;
	}
}

void Student::Print()
{
	cout << name << " " << height << " "<< weight << endl;
}

int turn[1000005];

int main()
{
	int i,j;
	int n;
	cin >> n;
	int a,b,c;
	string name;
	
	for(i = 1; i <= n; i++)
	{
		cin >> a;
		
		turn[i] = a;
		
		stu[a].creat();
		
		cin >> name >> b >> c;
		
		stu[a].cmp(name,b,c);
	}
	
	sort(turn+1,turn+n+1);
	
	int cnt = 0;
	turn[0] = -1;
	
	for(i = 1; i <= n; i++)
	{
		if(turn[i] != turn[cnt])
		{
			cnt = i;
			printf("%06d ",turn[i]);
			stu[turn[i]].Print();
		}
	}
	
	return 0;
}
//比较懒,就直接把类中函数定义和主函数放一起了= = 

单文件写法:

#include <string>
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <cstdio>
using namespace std;

class Student
{
	private:
		int height;
		int weight;
	public:
		string name;
		void creat();
		void cmp(string cmpname,int h,int w);
		void Print();
};

Student stu[1000005];

void Student::creat()
{
	if(height > 0)return ;
	
	height = 0;
	weight = 0;
}

void Student::cmp(string cmpname,int h,int w)
{
	if(h > height)
	{
		height = h;
		weight = w;
		name = cmpname;
	}
}

void Student::Print()
{
	cout << name << " " << height << " "<< weight << endl;
}

int turn[1000005];

int main()
{
	int i,j;
	int n;
	cin >> n;
	int a,b,c;
	string name;
	
	for(i = 1; i <= n; i++)
	{
		cin >> a;
		
		turn[i] = a;
		
		stu[a].creat();
		
		cin >> name >> b >> c;
		
		stu[a].cmp(name,b,c);
	}
	
	sort(turn+1,turn+n+1);
	
	int cnt = 0;
	turn[0] = -1;
	
	for(i = 1; i <= n; i++)
	{
		if(turn[i] != turn[cnt])
		{
			cnt = i;
			printf("%06d ",turn[i]);
			stu[turn[i]].Print();
		}
	}
	
	return 0;
}

5-2 纯sort写法

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stdlib.h>
#include <string>
using namespace std;

class P
{
	private:
		int height;
		int weight;
	public:
		string name;
		int norm;
		int display();
		void play();
		void f(int nor,string nam,int h,int w);
};

void P::play()
{
	cout << " " << height << " " << weight << endl;
}

int P::display()
{
	int a;
	a = height;
	return a;
}

void P::f(int nor,string nam,int h,int w)
{
	norm = nor;
	name = nam;
	height = h;
	weight = w;
}

P p[105];

bool cmp(P p1,P p2)
{
	if(p1.norm != p2.norm)return p1.norm > p2.norm;
	else if(p1.display() != p2.display())return p1.display() < p2.display();
}

int main()
{
	int n;
	string nam;
	int i,j;
	int w,h;
	int nor;
	
	scanf("%d",&n);
	
	for(i = 1; i <= n; i++)
	{
		cin >> nor >> nam >> h >> w;
		p[i].f(nor,nam,h,w);
	}
	
	sort(p+1,p+n+1,cmp);
	
	int tot = -1;
	
	for(i = n; i >= 1; i--)
	{
		if(p[i].norm != tot)
		{
			tot = p[i].norm;
			
			printf("%06d ",p[i].norm);
			
			cout << p[i].name;
			
			p[i].play();
		}
	}
	
	
	return 0;
}

5-1

分文件写法:

main.cpp

#include "date.h"
#include <iostream>
#include <stdlib.h>
#include <cstdio>
using namespace std;

int main()
{
	int year,mouth,day;
	int i,j;
	while(scanf("%d%d%d",&year,&mouth,&day) != EOF)
	{
		bool flag = true;
		Date D;
		
		D.fun1();
		D.fun2(year,mouth,day);
		
		flag = D.is_leap();
		D.display(flag);
	}
	return 0;
}

date.h

#ifndef DATE_H
#define DATE_H
#include <iostream>
using namespace std;

class Date
{
	private :
		int year;
		int day;
		int mouth;
	public :
		void fun1();
		void fun2(int a,int b,int c);
		void display(bool isleap);
		bool is_leap();
	//protected :
};

#endif // DATE_H

date.cpp

#include "date.h" // class's header file
#include <iostream>
#include <stdlib.h>
#include <cstdio>
using namespace std;

int leap_year[15]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int nomal_year[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};

void Date::fun1()
{
	year = 0;
	mouth = 0;
	day = 0;
}

void Date::fun2(int a,int b,int c)
{
	year = a;
	mouth = b;
	day = c;
}

void Date::display(bool isleap)
{
	int i,j;
	int tot = 0;
	if(isleap)
	{
		for(i = 1; i <= mouth-1; i++)
		{
			tot += leap_year[i];
		}
		
		tot += day;
		
		printf("%d\n",tot);
	}
	else
	{
		for(i = 1; i <= mouth-1; i++)
		{
			tot += nomal_year[i];
		}
		
		tot += day;
		
		printf("%d\n",tot);
	} 
}

bool Date::is_leap()
{
	if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
	{
		return true;
	}
	else return false;
}

单文件写法:

#include <iostream>
#include <stdlib.h>
#include <cstdio>
using namespace std;

int leap_year[15]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int nomal_year[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};

class Date
{
	private :
		int year;
		int day;
		int mouth;
	public :
		void fun1();
		void fun2(int a,int b,int c);
		void display(bool isleap);
		bool is_leap();
	//protected :
};

void Date::fun1()
{
	year = 0;
	mouth = 0;
	day = 0;
}

void Date::fun2(int a,int b,int c)
{
	year = a;
	mouth = b;
	day = c;
}

void Date::display(bool isleap)
{
	int i,j;
	int tot = 0;
	if(isleap)
	{
		for(i = 1; i <= mouth-1; i++)
		{
			tot += leap_year[i];
		}
		
		tot += day;
		
		printf("%d\n",tot);
	}
	else
	{
		for(i = 1; i <= mouth-1; i++)
		{
			tot += nomal_year[i];
		}
		
		tot += day;
		
		printf("%d\n",tot);
	} 
}

bool Date::is_leap()
{
	if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
	{
		return true;
	}
	else return false;
}

int main()
{
	int year,mouth,day;
	int i,j;
	while(scanf("%d%d%d",&year,&mouth,&day) != EOF)
	{
		if(year == 0 || mouth == 0 || day == 0)break;
		 
		bool flag = true;
		Date D;
		
		D.fun1();
		D.fun2(year,mouth,day);
		
		flag = D.is_leap();
		D.display(flag);
	}
	return 0;
}
posted @ 2016-05-23 17:42  Wasdns  阅读(224)  评论(0编辑  收藏  举报