PTA 题解2

一.1010 一元多项式求导

使用while的循环输入,以及输出结果的格式化

#include <iostream>
using namespace std;
int main()
{
    int a,b,p=1;
    while(cin>>a>>b)//循环输入.
    {
        if(b!=0)//b为0的时候,系数和指数都是0
        {
           if(p==0)cout<<" ";
          cout<<a*b<<" "<<b-1;
           p=0;
        }
    }
    if(p)cout<<"0 0";
    return 0;
}

二.1011 A+B 和 C (15 分)

使用三目运算符 ? :

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        long long a,b,c;
        cin>>a>>b>>c;
       printf("Case #%d: %s\n",i+1,a+b>c?"true":"false");
    }
    return 0;
}

三.1012 数字分类 (20 分)(柳神的代码)

对vector的使用,以及if语句

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, num, A1 = 0, A2 = 0, A5 = 0;
    double A4 = 0.0;
    cin >> n;
    vector<int> v[5];
    for (int i = 0; i < n; i++) {
        cin >> num;
        v[num%5].push_back(num);
    }
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < v[i].size(); j++) {
            if (i == 0 && v[i][j] % 2 == 0) A1 += v[i][j];
            if (i == 1 && j % 2 == 0) A2 += v[i][j];
            if (i == 1 && j % 2 == 1) A2 -= v[i][j];
            if (i == 3) A4 += v[i][j];
            if (i == 4 && v[i][j] > A5) A5 = v[i][j];
        }
    }
    for (int i = 0; i < 5; i++) {
        if (i != 0) printf(" ");
        if (i == 0 && A1 == 0 || i != 0 && v[i].size() == 0) {
            printf("N"); continue;
        }
        if (i == 0) printf("%d", A1);
        if (i == 1) printf("%d", A2);
        if (i == 2) printf("%d", v[2].size());
        if (i == 3) printf("%.1f", A4 / v[3].size());
        if (i == 4) printf("%d", A5);
    }
    return 0;
}

四.1006 Sign In and Sign Out (25 分)

我使用了结构体,从而使,名字与时间的对应关系明了

#include <iostream>
#include <string>
using namespace std;
struct A
{
	string name;
	string time1;
	string time2;
}n[1000];
int main()
{
	int k,min=0,max=0;
	cin >> k;
	for (int i = 0; i < k; i++)
		cin >> n[i].name >> n[i].time1>>n[i].time2;
	for (int i = 1; i < k; i++)
	{
		if (n[min].time1>n[i ].time1)min = i;
		if (n[max].time2 < n[i].time2)max = i;
	}
	cout << n[min].name << " "<<n[max].name;
	return 0;
}

五.1008 Elevator (20 分)

使用while语句循环,if语句判断求和.

#include <iostream>
using namespace std;
int main()
{
	int num[1000] = { 0 }, n, k = 0;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> num[i];
	k = num[0] * 6 + n * 5;//没一层都要停5s,所以先给他加起来,然后在家第一次所用的时间。
	int j = 0;
	while (j!=n-1)
	{
		int a = num[j++];//前一层
		int b = num[j];//后一层
		if (a > b)k += (a - b) * 4;//用前一层与后一层比较,再选择是6s还是4s。
		else k += (b - a) * 6;
	}
	cout << k;
	return 0;
}

上一篇:背包问题(动态规划)


下一篇:《算法笔记》8.1小节——搜索专题->深度优先DFS 广度优先BFS