主にテストポイントが嫌なため、非常に嫌な弦シミュレーションの質問。
テストポイント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;
}