PAT 乙级 1012 数字分类 (20分)---【数组】

8 篇文章 0 订阅

在这里插入图片描述
输入样例 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

思路1:

	1.一次性输完实例,再遍历查找
	2.把每类符合的先存到另外的数组中,再对每对数组进行计算

注意点1:

1.数组初始化要为0,后续计算会出错!int b_a2[n]={};或者 int b_a2[n]={0};

2.注意计算A2类的次数,以及每类的次数。不能拿a1…初值0与计算值相互看待!

代码1:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin>>n;
	int a[n];
	for(int i = 0; i < n; i++){
		cin>>a[i];
	}
	
	int a1=0;
	int a2=0;
	int a3=0;
	int a5=0;

	int cnt_a2=0;//次数 
	int b_a2[n]={};
	int j_a2=0;//记录下标 
	
	int cnt_a4=0;//次数 
	int sum_a4=0;//总和 
	
	int b_a5[n]={};
	int j_a5=0;//记录下标 
	
	for(int i = 0; i < n; i++){
		if(a[i]%5==0){
			if(a[i]%2==0){
				a1+=a[i];//a1
			}
		}
		if(a[i]%5==1){
			cnt_a2++;
			b_a2[j_a2]=a[i];
			j_a2++;
		}
		if(a[i]%5==2){
			a3++;
		}
		if(a[i]%5==3){
			cnt_a4++;
			sum_a4+=a[i];
		}
		if(a[i]%5==4){
			b_a5[j_a5]=a[i];
			j_a5++;
		}
	}
	//求a2 
	int sum1=0;
	int sum2=0;
	for(int i = 0; i < n; i++){
		if(i%2==0){
			sum1+=b_a2[i];
		}else if(i%2!=0){
			sum2+=(-b_a2[i]);
		}
	}
	a2=sum1+sum2;
	
	//求a4 
	double a4 = double(sum_a4)/double(cnt_a4);
	
	//求a5 
	int max=0;
	for(int i = 0; i < n; i++){
		if(b_a5[i]>max){
			max=b_a5[i];
			a5=max;
		}
	}
	
	if(a1!=0){
		printf("%d ",a1);
	} else {
		printf("N ");
	}
	
	if(cnt_a2!=0){
		printf("%d ",a2);
	}else {
		printf("N ");
	}
	
	if(a3!=0){
		printf("%d ",a3);
	}else {
		printf("N ");
	}
	
	if(cnt_a4!=0){
		printf("%.1f ",a4);
	}else {
		printf("N ");
	}
	
	if(a5!=0){
		printf("%d",a5);
	}else {
		printf("N");
	} 

	return 0;
	
}

思路2:

	1.次数,结果都存在对应下标的值内。
	2.边输入,边判断 ,没有对输入进行限制 ,人工限制 

注意点2:

	1.printf("%.1f ",(double)result[3]/count[3]);

代码2:

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	scanf("%d",&n);
	//次数,结果都存在对应下标的值内。 
	int count[5]={};
	int result[5]={};
	//边输入,边判断 
	//没有对输入进行限制 ,人工限制 
	int temp;
	for(int i = 0; i < n; i++){
		cin>>temp;
		if(temp%5==0){
			if(temp%2==0){
				count[0]++;
				result[0]+=temp;
			}
		}
		else if(temp%5==1){
			if(count[1]%2==0){
				result[1]+=temp;
			}else{
				result[1]-=temp;
			}
			count[1]++;
		}
		else if(temp%5==2){
			count[2]++;
		} 
		else if(temp%5==3){
			count[3]++;
			result[3]+=temp;
		}
		else if(temp%5==4){
			count[4]++;
			if(temp>result[4]){
				result[4]=temp;
			}
		} 
	}
	
	if(count[0]!=0){
		printf("%d ",result[0]);
	} else {
		printf("N ");
	}
	
	if(count[1]!=0){
		printf("%d ",result[1]);
	}else {
		printf("N ");
	}
	
	if(count[2]!=0){
		printf("%d ",count[2]);
	}else {
		printf("N ");
	}
	
	if(count[3]!=0){
		printf("%.1f ",(double)result[3]/count[3]);
	}else {
		printf("N ");
	}
	
	if(count[4]!=0){
		printf("%d",result[4]);
	}else {
		printf("N");
	} 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值