1012 數字分類 答案錯誤原因 對數字的分類處理 取模 PTAbasic 浙大C++

題目:
給定一系列正整數,請按要求對數字進行分類,並輸出以下 5 個數字:
A1= 能被 5 整除的數字中所有偶數的和;
A2= 將被 5 除後餘 1 的數字按給出順序進行交錯求和,即計算 n1−n​2+n3−n4⋯;
A3= 被 5 除後餘 2 的數字的個數;
A4= 被 5 除後餘 3 的數字的平均數,精確到小數點後 1 位;
A5= 被 5 除後餘 4 的數字中最大數字。

輸入格式:
每個輸入包含 1 個測試用例。每個測試用例先給出一個不超過 1000 的正整數 N,隨後給出 N 個不超過 1000 的待分類的正整數。數字間以空格分隔。
輸出格式:
對給定的 N 個正整數,按題目要求計算 A​1~A5並在一行中順序輸出。數字間以空格分隔,但行末不得有多餘空格。
若其中某一類數字不存在,則在相應位置輸出 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

代碼:

#include<iostream>
using namespace std;

int main(){
	int a1=0,a2=0,a3=0,a5=0;
	float a4=0;
	int now,flag[5]={0};
	cin>>now;
	while(cin>>now){
		int left=now%5;
		switch (left){
			case 0:
				if(now%2==0)
				{
					a1+=now;
					flag[left]++;
				}
				break;
			case 1:
				if(flag[left]%2==0)
					a2+=now;
				else
					a2-=now;
				flag[left]++;
				break;
			case 2:
				a3++;
				flag[left]++;
				break;
			case 3:
				a4+=now;
				flag[left]++;
				break;
			case 4:
				if(now>a5)
					a5=now;
				flag[left]++;
				break;
		}
		if(getchar()=='\n')
			break;
	}
	float a44=a4/float(flag[3]);
	if(flag[0]!=0)
		cout<<a1<<" ";
	else
		cout<<"N ";
	if(flag[1]!=0)
		cout<<a2<<" ";
	else
		cout<<"N ";
	if(flag[2]!=0)
		cout<<a3<<" ";
	else
		cout<<"N ";
	if(flag[3]>1){
		printf("%.1f",a44);    //c++浮點數輸出方法
		cout<<" ";
	}
	else
		cout<<"N ";
	if(flag[4]!=0)
		cout<<a5;
	else
		cout<<"N";
	
	
}

要點:
1、printf("%.1f",a44); //c++浮點數輸出方法
2、分別對輸入處理 :while(cin>>now){ //操作 }
3、如果很多答案錯誤:有可能是沒注意第一個輸入是後續輸入的數字個數,而不是處理的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章