欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT (Basic Level) Practice 1012 数字分类

程序员文章站 2022-06-07 14:39:05
...

题目

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
A1A_1​​ = 能被 5 整除的数字中所有偶数的和;
A2A_2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1n2+n3n4n_1−n​_2​​+n_​3​​−n_​4​​⋯
A3A_3​​ = 被 5 除后余 2 的数字的个数;
A4A_4​​​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A5A_5​​​​ = 被 5 除后余 4 的数字中最大数字。
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 NN,随后给出 NN 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 NN 个正整数,按题目要求计算 A1A_1​​~A5A_5​​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出 N

输入样例1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例1:

30 11 2 9.7 9

输入样例2:

8 1 2 4 5 6 7 9 16

输出样例2:

N 11 2 N 9

思路(2020-4-12 01:37:1)

这题不用思路,无脑敲。

  • 逐个获取输入数据,逐个判断是否符合各个要求,逐个计算累加,逐个输出。
  1. c++控制输出小数位数https://www.cnblogs.com/hgfgood/p/4248337.html
  2. https://blog.csdn.net/edricbjtu/article/details/41082597这个dalao的博客学习,搞了好久都不行,不管设置几位,都给我输出1e+001PAT (Basic Level) Practice 1012 数字分类
  3. 后来找到了2的链接的dalao,加了个setiosflags(ios::fixed)搞定。
  4. cout << setiosflags(ios::fixed) << setprecision(1) << a4<< " ";#include <iomanip>
  5. 下次还是printf好了。

答案1(2020-4-12 01:47:04)

答案还没提交,oj卡住了,有3个在排队,过了一会就,提示内部错误,也真是活久见了。
PAT (Basic Level) Practice 1012 数字分类今天oj可以提交了(2020-4-12 10:40:38),7正确一错误

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a1 = 0, a2 = 0, a3 = 0, a5 = 0;
	float a4 = 0;
	int a4count=0;
	int n;
	cin >> n;
	int t;
	int a2flag = 1;
	for (int i = 0; i < n ; i++)
	{
		cin >> t;
		if(t % 10 == 0)
			a1 += t;
		if(t % 5 == 1)
		{
			a2 += t*a2flag ;
			a2flag *= -1;
		}
		if(t % 5 == 2)
		{
			a3++;
		}
		if(t % 5 == 3)
		{
			a4 += t;
			a4count ++;
		}
		if(t % 5 == 4)
		{
			if(t > a5)
			a5 = t;
		}
	}
	
	if(a1 != 0)
		cout << a1<< " ";
	else cout << "N ";
	
	if(a2 != 0)//wrong point!
		cout << a2<< " ";
	else cout << "N ";
	
	if(a3 != 0)
		cout << a3<< " ";
	else cout << "N ";
	
	if(a4 != 0)
	{
		a4 = a4/a4count;
		cout << setiosflags(ios::fixed) << setprecision(1) << a4<< " ";
	}
	else cout << "N ";
	
	if(a5 != 0)
		cout << a5;
	else cout << "N";
	
	return 0;
}

答案2(2020-4-12 10:41:06)

学习了一下dalao,对比了一下自己的代码,发现是A2A_2出现了问题,可能有符合A2A_2要求的数,但是结果是0,答案一中标了wrong point的位置。假如交错求和之后结果是0,我的代码是输出N,过不了这个测试点,只能说这套测试数据,很niubility。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int a1 = 0, a2 = 0, a3 = 0, a5 = 0;
	float a4 = 0;
	int a4count=0;
	int n;
	cin >> n;
	int t;
	int a2flag = 1;
	int a2count = 0; 
	for (int i = 0; i < n ; i++)
	{
		cin >> t;
		if(t % 10 == 0)
			a1 += t;
		if(t % 5 == 1)
		{
			a2 += t*a2flag ;
			a2flag *= -1;
			a2count++;
		}
		if(t % 5 == 2)
		{
			a3++;
		}
		if(t % 5 == 3)
		{
			a4 += t;
			a4count ++;
		}
		if(t % 5 == 4)
		{
			if(t > a5)
			a5 = t;
		}
	}
	
	if(a1 != 0)
		cout << a1<< " ";
	else cout << "N ";
	
	if(a2count != 0)
		cout << a2<< " ";
	else cout << "N ";
	
	if(a3 != 0)
		cout << a3<< " ";
	else cout << "N ";
	
	if(a4 != 0)
	{
		a4 = a4/a4count;
		cout << setiosflags(ios::fixed) << setprecision(1) << a4<< " ";
	}
	else cout << "N ";
	
	if(a5 != 0)
		cout << a5;
	else cout << "N";
	
	return 0;
}
相关标签: 算法入门