PTA (Basic Level)刷题(3)

第十一题
在这里插入图片描述
思路:将前两个给出的正整数相加与第三个正整数做比较,因为int数据类型可能使数值超出范围,所以使用long long类型来存放数据。并定义a4来表示当前是第几组数据。

第十二题
在这里插入图片描述
思路:输入第一个数字N后,直接将后面的数字输入一个处理一个。注意:最后一个测试点,A2交错求和可能求和结果就是0,所以需要单独判断存不存在。

int main()
{
  int A1=0,A2=0,A3=0,A5=0;
  double A4=0.0;
  int a,N;
  int k=1;
  int cntA2=0,cntA4=0;;
  cin >> N;
 //for(int i=0;i<N;i++)
  while(N--)
  {
    cin>>a;
    if(a%10==0) 
      A1 +=a;
    else if (a%5==1) 
    {
      A2 = A2+k*a;
      k=-k;
      cntA2++;
    }
    else if(a%5==2) A3++;
    else if(a%5==3) 
    {
      A4 +=a;
      cntA4 =cntA4+1;
    }
    else if(a%5==4)
    {
      if(a>A5) A5=a;
    }
  }
//部分代码展示

第十三题
在这里插入图片描述
思路:编写一个判断是否为素数的函数,首先题目给了M和N的范围,就可以通过计数器得到一共有多少个素数,所以创建一个数组把这10000个素数算好存起来。之后就直接将需要打印的位置在素数数组中找到打印就行,需要注意换行和空格问题。

//部分代码展示
using namespace std;
int main()
{
	int M = 0, N = 0;
	int t = 0, k = 2;
	int a[10000];
	int j = 0;
	cin >> M >> N;
	while (t < N) {     //存储第N-M个之间的素数在a数组中 
		if (isprime(k)) {
			t++;
			if (t >= M) 
				a[j++] = k;
		}
		k++;	

第十四题
在这里插入图片描述
思路:

  1. 星期一到星期天一共七天,所以对应的大写字母应该是A到G,取值范围不能弄错。
  2. 计算小时时,对应的字符只能是数字或者大写字母A到N。
  3. 对比第三个和第四个字符串,任何大小写字母只要相对应了那就符合条件,可获得字符下标。
  4. 注意用switch语句实现表示星期几。

第十五题
在这里插入图片描述
思路:
5. 题目分析得到:第一类:H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序。第二类:才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;第三类:德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;第四类:其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。 第五类就不管他了。
6. 当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
(借鉴了这位的见解

#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
struct person 
{
	string id;
	int d;
	int c;
};
person q1[100000], q2[100000], q3[100000], q4[100000];
bool cmp(person a, person b)
{
	if (a.d + a.c != b.c + b.d)
	{
		return (a.d + a.c) > (b.c + b.d);
	}
	else
	{
		if (a.d != b.d)
		{
			return a.d > b.d;
		}
		else
		{
			return a.id < b.id;
		}
	}
}

int main()
{
	int n, l, h, i;
	person p;
	cin >> n >> l >> h;
	int n1 = 0, n2 = 0, n3 = 0, n4 = 0;
	while (n--)
	{
		cin >> p.id >> p.d >> p.c;
		if (p.d < l || p.c < l)
			continue;
		if (p.d >= h && p.c >= h)
		{
			q1[n1++] = p;
		}
		else if (p.d >= h && p.c < h)
		{
			q2[n2++] = p;
		}
		else if (p.d < h && p.c < h && p.d >= p.c)
		{
			q3[n3++] = p;
		}
		else
		{
			q4[n4++] = p;
		}
	}
	sort(q1, q1 + n1, cmp);
	sort(q2, q2 + n2, cmp);
	sort(q3, q3 + n3, cmp);
	sort(q4, q4 + n4, cmp);
	int cnt = n1 + n2 + n3 + n4;
	cout << cnt << endl;
	i = 0;
	while (i < n1)
	{
		p = q1[i++];
		cout << p.id << " " << p.d << " " << p.c << endl;
	}
	i = 0;
	while (i < n2)
	{
		p = q2[i++];
		cout << p.id << " " << p.d << " " << p.c << endl;
	}
	i = 0;
	while (i < n3)
	{
		p = q3[i++];
		cout << p.id << " " << p.d << " " << p.c << endl;
	}
	i = 0;
	while (i < n4)
	{
		p = q4[i++];
		cout << p.id << " " << p.d << " " << p.c << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值