这是乙级的一道题。当时做的时候强行把实现了stod。当时记得花了很长时间。现在是模考,时间要紧,所以STL有stod,就用了STL的。
其实只是判断字符串是不是纯数字组成。有没有多个’.’,因为只能有0个或1个小数点嘛。还要字符串长度:-999.99极限也就是7.
通过上面测试的字符串:肯定能使用stod了。在使用stod转换成double。判断是否小于1000,大于-1000即可。
Code:
#include#include#include#includeusingnamespace std;boolislegal(const string& a){auto it = a.cbegin();if(*it =='-')
it++;while(it != a.cend()){if(isalpha(*it))returnfalse;
it++;}bool flag =false;for(int i =0; i < a.size(); i++){if(a[i]=='.'){if(flag ==false){
flag =true;if(a.size()- i-1>2)returnfalse;}elsereturnfalse;}}if(a.size()>7)returnfalse;double result =stod(a);if(result >1000|| result <-1000)returnfalse;returntrue;}intmain(){int N,K =0;scanf("%d",&N);double result=0.0;
string input;for(int i =0; i < N; i++){
cin >> input;if(islegal(input)){
result +=stod(input);
K++;}else
cout <<"ERROR: "<< input <<" is not a legal number
";}if(K ==0)
cout <<"The average of 0 numbers is Undefined
";elseif(K ==1)printf("The average of 1 number is %.2f
", result);elseprintf("The average of %d numbers is %.2f", K, result / K);}
1109Group Photo
这也是乙级的一道题QAQ。
一开始把题意读错了,所以出现了段错误。浪费了一点时间
把题意读清楚了后。就OK了。其实这题和螺旋矩阵是一个思路。都是把数据按规律放在数组里。最后输出。
先对站最最后一行的人赋值。再对其他行循环赋值。
怎么赋值呢?就按题目的要求来:先赋值中间的人m/2+1,在赋值m/2+1-i,m/2+1+i。控制i变量即可。
Code:
#include#include#include#include#includeusingnamespace std;struct Stu{
string name;int tall;};intmain(){int N, K;// K hangscanf("%d %d",&N,&K);
vector<Stu>data(N);for(int i =0; i < N; i++){
cin >> data[i].name >> data[i].tall;}sort(data.begin(), data.end(),[](const Stu& a,const Stu& b){if(a.tall == b.tall)return a.name < b.name;elsereturn a.tall > b.tall;});int row = N / K;auto it = data.cbegin();
vector<vector<Stu>>photo(K);
photo[0].resize(row + N % K);int m =(row + N % K)/2;//one row;
photo[0][m]=*it++;for(int i =0; i < m; i++){
photo[0][m - i-1]=*it++;if(m+i+1<(row+N%K))
photo[0][m + i+1]=*it++;}
m = row/2;for(int i =1; i < K; i++){
photo[i].resize(row);
photo[i][m]=*it++;for(int j =0; j < m; j++){
photo[i][m - j -1]=*it++;if(m + j +1< row)
photo[i][m + j +1]=*it++;}}for(int i =0; i <K; i++){for(int j =0; j < photo[i].size(); j++)
cout << photo[i][j].name <<(j +1== photo[i].size()?'
':' ');}}/*
10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159
*/