[PAT]数字分类引出浮点数格式化输出

题目描述

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

A1 = 能被5整除的数字中所有偶数的和;

A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;

A3 = 被5除后余2的数字的个数;

A4 = 被5除后余3的数字的平均数,精确到小数点后1位;

A5 = 被5除后余4的数字中最大数字。

输入描述:

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

输出描述:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出“N”。

输入例子:

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

输出例子:

30 11 2 9.7 9

代码如下:
<span style="font-family:KaiTi_GB2312;font-size:24px;">#include<iostream>
using namespace std;

int main()
{
	long long int A1=0,A2=0,A3=0,A5=0;
	double A4=0.0;

	int flag = 1;
	int count1=0,count2=0,count3=0,count4=0,count5=0;//记录是否存在A1--A5

	int i;

	long long int array[1000];
	unsigned int N;
	cin>>N;

	for(i=0;i<N;++i)
		cin>>array[i];
	for(i=0;i<N;++i)
	{
		switch(array[i]%5)
		{
		case 0:
			if(array[i]%2 == 0)//1其他方式??
			{
				count1++;
				A1 += array[i];
			}
			break;
		case 1:
			count2++;
			A2 += flag*array[i];
			flag = -flag;
			break;
		case 2:
			count3++;
			A3 += 1;
			break;
		case 3:
			count4++;
			A4 += array[i];
			break;
		case 4:
			count5++;
			if(A5 < array[i])
				A5 = array[i];
			break;
		}
		
	}
	if(count1 == 0)
		cout<<"N ";
	else 
		cout<<A1<<" ";

	if(count2 == 0)
		cout<<"N ";
	else 
		cout<<A2<<" ";

	if(count3 == 0)
		cout<<"N ";
	else 
		cout<<A3<<" ";

	if(count4 == 0)
		cout<<"N ";
	else 
		printf("%.1f ",A4/count4);//2浮点数按格式输出重点!!!

	if(count5 == 0)
		cout<<"N";
	else 
		cout<<A5;

	cout<<endl;
	return 0;
}</span>

微笑关于该编程题,学习一下知识点:微笑
1:判断n是否能被2整除的两种方式

	1:if(n%2 == 0)
	2:if(n&1 == 0)二进制....8421,除了最低位其余位都是2的倍数,若n是偶数则最低位一定为0,所以和1相&一定为0

2:判断n是否既能被5整除,又能被2整除

	1:if(n%5 == 0 && n%2 == 0)
	2: if(n%10 == 0)条件等价于能被10整除

3:输出的数值(n)精确到小数点后一位

	1:printf("%.1f",n);c语言方式
	2:cout.setf(ios::fixed);c++方式
	   cout.precision(1);
	   cout<<n<<endl;

	   cout<<setiosflags(ios::fixed)<<setprecision(1)<<n<<endl;
 
拓展:关于浮点数格式化输出用下面的程序说明:

#include<iostream>
using namespace std;

int main()
{
	float f = 1.0/3.0;
	float f1 = 0.000000002;
	float f2 = -7.6;

	cout<<f<<" "<<f1<<" "<<f2<<endl;//正常输出

	cout.setf(ios::showpos);		//强制正数前加+号
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout.unsetf(ios::showpos);		//取消正数前加+号
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout.setf(ios::showpoint);		//强制显示无效小数点后的0
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout.unsetf(ios::showpoint);	//取消显示无效小数点后的0
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout.setf(ios::scientific);		//科学计数法
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout.unsetf(ios::scientific);	//取消科学计数法
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout.setf(ios::fixed);			//按点显示输出,不按科学计数
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout.unsetf(ios::fixed);		//取消按点输出
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout.precision(3);				//单独使用表示浮点数有效位的个数
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout.precision(6);				//c++默认的流输出数值有效位是6
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	return 0;
}
#include<iostream>
#include<iomanip>//io流控制头文件
using namespace std;

int main()
{
	float f = 1.0/3.0;
	float f1 = 0.000000002;
	float f2 = -7.6;

	cout<<f<<" "<<f1<<" "<<f2<<endl;	//正常输出

	cout<<setiosflags(ios::showpos);	//强制正数前加+号
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout<<resetiosflags(ios::showpos);	//取消正数前加+号
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout<<setiosflags(ios::showpoint);	//强制显示无效小数点后的0
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout<<resetiosflags(ios::showpoint);//取消显示无效小数点后的0
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout<<setiosflags(ios::scientific);	//科学计数法
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout<<resetiosflags(ios::scientific);//取消科学计数法
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout<<setiosflags(ios::fixed);		//按点显示输出,不按科学计数
	cout<<f<<" "<<f1<<" "<<f2<<endl;
	cout<<resetiosflags(ios::fixed);	//取消按点输出
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout<<setprecision(3);				//单独使用表示浮点数有效位的个数
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	cout<<setprecision(6);				//c++默认的流输出数值有效位是6
	cout<<f<<" "<<f1<<" "<<f2<<endl;

	return 0;
}

以上两个程序等价,第二个注意要加上头文件:<iomanip>




	

	
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值