2019-07-10原来已经毕业一年了呀,原来傻了吧唧的小包子现在变成了傻了吧唧的老包子,嘤嘤嘤……很多人一年多都没见了呀,毕业后不知去向,想想那天下午我们一起吃鸡在游戏里看见了好看的晚霞,真的好开心

1012B 

依旧很简单,就是给输入的数分类,输出……

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • A​1​​ = 能被 5 整除的数字中所有偶数的和;
  • A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;
  • A​3​​ = 被 5 除后余 2 的数字的个数;
  • A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
  • A​5​​ = 被 5 除后余 4 的数字中最大数字。

新的知识点,就是控制输出精度,使用setprecision( )函数,需要添加头文件 #include<iomanip>,假如输出两位小数点精度的a,前面需要加fixed(加了是控制小数点后位数的,不加是控制整体位数的),即cout<<fixed<<setprecision(2)<<a;

代码:

#include <iostream>
#include <vector>
#include<iomanip>
using namespace std;

int main()
{
	int num, sum1 = 0, sum2 = 0, sum3 = 0,sum5 = 0, i = 0;
	float a4, sum4 = 0;
	int N;
	int flag = 1; int a = 0;
	cin >> N;
	for (int j = 0; j<N; j++)
	{
		cin >> num;
		if (num % 10 == 0)
		{
			sum1 += num; a = 1;
		}
		else if (num % 5 == 1)
		{
			sum2 += flag*num;
			flag *= -1;
		}
		else if (num % 5 == 2)
			sum3++;
		else if (num % 5 == 3)
		{
			sum4 += num;
			//cout << sum4 << endl;
			i++;
			//cout << i << endl;
		}
		else if (num % 5 == 4)
			sum5 = sum5<num ? num : sum5;
		else continue;
	}
	if (a)
		cout << sum1;
	else cout << "N";
	if (sum2)
		cout << " " << sum2;
	else cout << " N";
	if (sum3)
		cout << " " << sum3;
	else cout << " N";
	if (i)
	{
		a4 = sum4 / i;
		cout << " " << fixed << setprecision(1) << a4;
	}
	else cout << " N";
	if (sum5)
		cout << " " << sum5;
	else cout << " N";
	system("PAUSE");
	return 0;
}

要考虑,sum1和sum2为0 的条件,然后就没什么了。

下午应付完老师,就去做PAT甲级的题,然后发现阻挡我做题的最重要一点,就是题目看不懂,看着输入输出样例研究半天,也没猜对,不得不打开我的网易字典……

polynomials 多项式

这道题就是给出两行数字,先给次数,后面紧跟着系数。两行汇总输出,小数点保留后面一位。

然后我只完成了15/25,找不到哪里错了;先贴代码。

#include<iostream>
#include<iomanip>
#include <vector>
using namespace std;

int main()
{
	float pol1[1005] = { 0 };
	float pol2[1005] = { 0 };
	float ans[1000];
	int i, j, a1, a2, a,c,d;
	float b; int count = 0;
	cin >> a1;
	while (cin >> a >> b)
	{
		pol1[a] = b;
		count++;
		if (count == a1)
			break;
	}
	cin >> a2; count = 0;
	while (cin >> a >> b)
	{
		pol2[a] = b;
		count++;
		if (count == a2)
			break;
	}
	count = 0;
	vector<int>num;
	for (j = 0; j<1005; j++)
	{
		ans[j] = pol1[j] + pol2[j];
		if (ans[j]!=0)
			num.push_back(j);
	}
	int l = num.size();
	cout << l << " ";
    if(l==0)
        cout<<"0";
	if (l == 1)
	{
		 c = ans[num[0]];
		 if (c - ans[num[0]] == 0)
			cout << num[0] << " " << ans[num[0]];
		 else cout << num[0] << " " <<fixed<< setprecision(1) << ans[num[0]];
	}
	else
	{
		for (i = l-1; i>0; i--)
		{
			c = ans[num[i]];
            if(ans[num[i]]==0)
                continue;

			if (c - ans[num[i]] == 0)
				cout << num[i] << " " << ans[num[i]] << " ";
			else  cout << num[i] << " " << fixed << setprecision(1) << ans[num[i]] << " ";
		}
		c = ans[num[0]];
		if (c - ans[num[0]] == 0)
			cout << num[0] << " " << ans[num[0]];
		else cout << num[0] << " " << fixed << setprecision(1) << ans[num[0]];
	}
	system("PAUSE");
	return 0;
}

说几个应该注意的问题吧,首先系数为0的项不进行输出,这个直接滤过了,当系数不为零是才能push_back进去。还有就是精确到小数点后面一位,这个我想了很久(让你不用printf的后果……) ,首先所有数字都是float形式,然后我定义一个int,用这个int减去float,如果不为零,说明是小数,就用上面说的fixed<<setprecision()<<进行输出就好。然后看了别人的答案,好一个printf啊……简单明了,printf("%0.1f", a[i]),心痛了…记住这个上午就不用这么费劲找了呵呵呵……

然后百度了别人的答案,跟我思路一样,我实在不知道自己错在哪里了QAQ 只能等哪天老宋有时间帮我看一下了哈哈哈哈哈,抱紧大腿!

今天就先这样啦,爱你!

发布了42 篇原创文章 · 获赞 16 · 访问量 2889

猜你喜欢

转载自blog.csdn.net/weixin_44412218/article/details/95319598
今日推荐