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

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

猜你喜欢

转载自blog.csdn.net/weixin_44926962/article/details/109751538