A组问题的总结

1.PAT A1001题目要求将数字按照三三一组,用" , "隔开,那么你就计算" , "会出现的位置, 下标为%3 == 0 && 下标 >0的后面

2.PAT A1013给定n个顶点的图,顶点到顶点的边也给定.   (题目意思是你把某一个顶点删除掉,问你将其余顶点连在一起还需要多少条边)

思路:当你把某一个顶点删除后,它所连接的边也是不需要的.需要多少条边才能把这个图中剩下顶点连接起来

        一?你把这个图里面的这个边给删掉,顶点删掉....

        二:结合图的遍历特点,如果visit[i] == false;你才会去访问这个顶点,并且cnt++

             你在初始时就将这个顶点标记为true,for(int i =0 ;i < n;i++) if(visit[i] == false) 就不会遍历到这个顶点

             从而求出剩余顶点构成的连通图的数量减去1,就是你需要添加的边的数量

3.结构体数组的使用,对结构体中按照某一变量的大小进行排序,并且返回获得其首个元素

// PAT A1006谁来得早,谁来的晚.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;


struct student{
	char ID[16];
	char intime[10];
	char outtime[10];
};

bool cmpearly(student a,student b){
	int ha = (a.intime[0] - '0') * 10 + (a.intime[1] - '0');
	int hb = (b.intime[0] - '0') * 10 + (b.intime[1] - '0');

	if(ha != hb){
		return ha < hb;
	}

	int ma = (a.intime[3] - '0') * 10 + (a.intime[4] - '0');
	int mb = (b.intime[3] - '0') * 10 + (b.intime[4] - '0');

	if(ma != mb){
		return ma < mb;
	}

	int sa = (a.intime[6] - '0') * 10 + (a.intime[7] - '0');
	int sb = (b.intime[6] - '0') * 10 + (b.intime[7] - '0');

	if(ha != hb){
		return ha < hb;
	}
}

bool cmplate(student a,student b){
	int ha = (a.outtime[0] - '0') * 10 + (a.outtime[1] - '0');
	int hb = (b.outtime[0] - '0') * 10 + (b.outtime[1] - '0');

	if(ha != hb){
		return ha > hb;
	}

	int ma = (a.outtime[3] - '0') * 10 + (a.outtime[4] - '0');
	int mb = (b.outtime[3] - '0') * 10 + (b.outtime[4] - '0');

	if(ma != mb){
		return ma > mb;
	}

	int sa = (a.outtime[6] - '0') * 10 + (a.outtime[7] - '0');
	int sb = (b.outtime[6] - '0') * 10 + (b.outtime[7] - '0');

	if(ha != hb){
		return ha > hb;
	}
}

int main()
{
	int m;
	scanf("%d",&m);

	vector<student> stu;
	
	for(int i = 0;i <m;i++){
		student temp;

		scanf("%s %s %s",temp.ID,temp.intime,temp.outtime);

		stu.push_back(temp);

	}

	sort(stu.begin(),stu.end(),cmpearly);
    vector<student>::iterator it = stu.begin();

	printf("%s ",it->ID);
    
	sort(stu.begin(),stu.end(),cmplate);
	vector<student>::iterator it1 = stu.begin();

	printf("%s\n",it1->ID);


	//system("pause");
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值