PAT B1054平均化(20ポイント)(テストポイント0、1、2、3の分析)

ここに画像の説明を挿入
主にテストポイントが嫌なため、非常に嫌な弦シミュレーションの質問。
テストポイント0:サンプルの場合、サンプルはこの
テストポイント1に合格できます:除数の場合は0、出力は具体的に判断されます。
テストポイント2:除数は特異であり、出力は「1の平均番号はYです」、注意してください番号の後にsはありません!
テストポイント3:最後の桁に小数点が付いた「123.」の形式の数字も有効な数字としてカウントされるため、最も嫌なテストポイントです。質問は明確に述べられていません。私はいつも小数点を考えていました。最後のポイントも違法です。ずっとTvTを探していました

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

bool isclegal(char c){
    
    
	if(!(c>='0'&&c<='9') && c!='-' && c!='.') return false;
	return true;
}

bool isslegal(string s){
    
    
	int dian = 0;
	int pd;
	bool havenum = false;
	for(int i=0; i<s.size(); i++){
    
    
		if(!isclegal(s[i])){
    
    
			return false;
		}else{
    
    
			if(s[i] == '-'){
    
    
				if(i != 0) return false;
			}
			if(s[i] == '.'){
    
    
				if(i==0) return false;
				pd = i;
				dian++;
			} 
			if(dian > 1) return false;
			if(s[i]<='9' && s[i]>='0') havenum = true;
		}
	}
	if(!havenum) return false;
	if(dian == 1){
    
    
		int len = s.size() - pd - 1;
		if(len > 2) return false;
	}
	double d = stof(s);
	if(d<-1000 || d>1000) return false;
	
	return true;
}

int main(){
    
    
	int n;
	double sum = 0;
	int num = 0;
	scanf("%d", &n);
	
	string str[n];
	for(int i=0; i<n; i++){
    
    
		cin >> str[i];
		if(isslegal(str[i])){
    
    
			sum += stof(str[i]);
			num++;
		}else{
    
    
			printf("ERROR: %s is not a legal number\n", str[i].c_str());		
		}
	}
	if(num == 0){
    
    
		printf("The average of 0 numbers is Undefined");
	}else if(num == 1){
    
    
		printf("The average of 1 number is %.2f", num, sum/(num*1.0));
	}else{
    
    
		printf("The average of %d numbers is %.2f", num, sum/(num*1.0));
	}
	
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_45964844/article/details/113681652