目录
1051 复数乘法
AC主要考察细节,比如:
(1)12、13行,如果-0.005<A<0,那么输出的就是-0.00而不是0.00,因此要进行处理;
(2)16行的判断条件,如果虚部为负就不用添加运算符号,若是正数要手动加+号。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double R1,R2,P1,P2,A,B;
cin>>R1>>P1>>R2>>P2;
A=R1*R2*cos(P1+P2);
B=R1*R2*sin(P1+P2);
if(A<0 && A>=-0.005) A=0;
if(B<0 && B>=-0.005) B=0;
printf("%.2lf",A);
if(B>=0)
printf("+%.2lfi",B);
else
printf("%.2lfi",B);
}
1052 卖个萌
(1)容器填充,考虑到中括号内元素不一定长度为1,因此设置start end存储;
(2)36行注意需要输出反斜杠时,源码中要写两个。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
vector<vector<string>> v(3);
string s[3];
for(int i=0;i<3;i++)
getline(cin,s[i]);
for(int i=0;i<3;i++)
{
for(int j=0;j<s[i].length();j++)
{
int start,end;
if(s[i][j]=='[')
start=j+1;
if(s[i][j]==']')
{
end=j;
string temp=s[i].substr(start,end-start);
v[i].push_back(temp);
}
}
}
int n;
cin>>n;
while(n--)
{
int a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
if(a>v[0].size()||b>v[1].size()||c>v[2].size()||d>v[1].size()||e>v[0].size()||a<1||b<1||c<1||d<1||e<1)
cout<<"Are you kidding me? @\\/@"<<endl;
else
cout<<v[0][a-1]<<"("<<v[1][b-1]<<v[2][c-1]<<v[1][d-1]<<")"<<v[0][e-1]<<endl;
}
}
1053 住房空置率
写的时候12和17行写顺手了写了while(N--),结果全错,因为N和n不能改动。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int N,d;
double e;
cin>>N>>e>>d;
double may=0,certain=0;
for(int i=0;i<N;i++)
{
int n;
cin>>n;
int counter=0;
for(int j=0;j<n;j++)
{
double temp;
cin>>temp;
if(temp<e)
counter++;
}
if(counter>n/2&&n>d)
{
certain++;
continue;
}
if(counter>n/2)
may++;
}
double may_rate=(may/N)*100.0;
double certain_rate=(certain/N)*100.0;
cout<<fixed<<setprecision(1)<<may_rate<<"% "<<certain_rate<<"%";
}
1054 求平均值
(1)注意几个不合法类型:
小数点出现了一次以上;
如果长度为1且仅有负号;
小数点后超过两位;
在区间之外;
负号出现了一次以上;
如果长度为1且仅有小数点;
(最后两种我写的时候也没有考虑到..)
(2)第42行的fabs()要记得添加cmath头文件;
(3)第57行的情况注意输出格式中,要写number而不是numbers不然测试点2会报错(说实话这里根本没想到,还是看的别人的题解才明白TT)(P.S.话说为什么0个都能用复数1个要用单数)。
#include<iostream>
#include<vector>
#include<cctype>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
vector<double> v;
while(n--)//判定以及填充容器过程
{
string s;
cin>>s;
int OneMinus=0;//是否仅有负号
int point=0;//小数点个数
int alpha=0;//字母个数
int pos=0;//小数点位置
for(int i=0;i<s.length();i++)
{
if(s[i]=='-'&&s.length()==1)
OneMinus++;
if(s[i]=='.')
{
point++;
pos=i+1;
}
if(isalpha(s[i]))
alpha++;
}
if(OneMinus>0)
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;//仅有负号不合法
else if(alpha>0)
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;//有字母不合法
else if(point>1)
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;//小数点大于一个不合法
else if(point==1&&s.length()-pos>2)
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;//多位小数不合法
else if(fabs(stod(s))>1000)
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;//范围超过不合法
else
{
double t=stod(s);
v.push_back(t);
}
}
double sum=0;
for(auto x:v)
sum+=x;
cout<<"The average of "<<v.size();
if(v.empty())
cout<<" numbers is Undefined";
else if(v.size()==1)
cout<<fixed<<setprecision(2)<<" number is "<<sum/v.size();
else
cout<<fixed<<setprecision(2)<<" numbers is "<<sum/v.size();
}
1055 集体照
参考了这位博主的题解;
主要难点应该填充output[m]的那块代码;
写的时候我又想当然地写了while(row--),结果测试点0和测试点4出错,因为row变量在执行段里用到了,这毛病最近犯好多次T^T。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct info
{
string name;
int height;
};
bool cmp(info a,info b)
{
if(a.height!=b.height)
return a.height>b.height;
else
return a.name<b.name;
}
int main()
{
int n,k;
int m;
cin>>n>>k;
vector<info> student(n);
for(int i=0;i<n;i++)
cin>>student[i].name>>student[i].height;
sort(student.begin(),student.end(),cmp);
int t=0,row=k;
while(row)
{
if(row==k)
m=n-n/k*(k-1);//每排人数
else
m=n/k;
vector<string> output(m);
output[m/2]=student[t].name;
//left
int j=m/2-1;
for(int i=t+1;i<t+m;i=i+2)
output[j--]=student[i].name;
//right
j=m/2+1;
for(int i=t+2;i<t+m;i=i+2)
output[j++]=student[i].name;
//output
cout<<output[0];
for(int i=1;i<m;i++)
cout<<" "<<output[i];
cout<<endl;
t+=m;
row--;
}
}
1056 组合数的和
找出14行公式即可。
#include<iostream>
using namespace std;
int main()
{
int n,a[10];
cin>>n;
int sum=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
sum=sum*(n-1)*11;
cout<<sum;
}
1057 数零壹
字母先转小写再处理相加。
#include<iostream>
#include<cctype>
using namespace std;
int main()
{
string s;
int sum=0;
int binary[2]={0};
getline(cin,s);
for(auto x:s)
if(isalpha(x))
sum=sum+tolower(x)-'a'+1;
while(sum)
{
binary[sum%2]++;
sum/=2;
}
cout<<binary[0]<<" "<<binary[1];
}
1058 选择题
(1)参考了这篇题解;
(2)别忘了28行的getchar()。
#include<iostream>
#include<vector>
#include<set>
#include<cctype>
using namespace std;
int main()
{
int N,M;
cin>>N>>M;
vector<set<char>> right(M);
int score[M]={0};
int WrongCnt[M]={0};
for(int i=0;i<M;i++)
{
int s,o,r;//Score,OptionNum,RightNum
cin>>s>>o>>r;
for(int j=0;j<r;j++)
{
char rightans;
cin>>rightans;
right[i].insert(rightans);
}
score[i]=s;
}
getchar();
for(int i=0;i<N;i++)
{
string s;
int StuScore=0,counter=0;//counter代表题号
getline(cin,s);
set<char> stuans;
for(auto x:s)
{
if(isalpha(x))
stuans.insert(x);
if(x==')')
{
if(stuans==right[counter])
StuScore+=score[counter];
else
WrongCnt[counter]++;
stuans.clear();
counter++;
}
}
cout<<StuScore<<endl;
}
int Max=-1;
for(int i=0;i<M;i++)
Max=max(Max,WrongCnt[i]);
if(Max==0||Max==-1)
cout<<"Too simple"<<endl;
else
{
cout<<Max;
for(int i=0;i<M;i++)
{
if(WrongCnt[i]==Max)
cout << ' ' <<i+1;
}
}
}
1059 C语言竞赛
(1)思路:因为id是四位数字,所以创一个长度一万的数组,id作为下标内容是排名;
(2)35行要用printf限定长度,因为如果用cout不方便补前置0;
(3)isPrime()这个函数体中,第10行的for循环条件如果写i<sqrt(x),测试点2会报错;
(4)debug最久的点在于最终输出时,判定素数的部分如果你第6行没有考虑到0和-1不算素数,那要注意把这个if判定加在rank[i]==0和-1都判定完之后。
#include<iostream>
#include<vector>
using namespace std;
bool isPrime(int x)
{
if(x<=1)
return false;
if(x==2)
return true;
for(int i=2;i<x;i++)
{
if((x%i)==0 )
return false;
}
return true;
}
int main()
{
int N;
cin>>N;
int rank[10000]={0};
for(int i=1;i<=N;i++)
{
int t;
cin>>t;
rank[t]=i;
}
int K;
cin>>K;
while(K--)
{
int t;
cin>>t;
printf("%04d: ",t);
if(rank[t]==1)
{
cout<<"Mystery Award"<<endl;
rank[t]=-1;
}
else if(isPrime(rank[t]))
{
cout<<"Minion"<<endl;
rank[t]=-1;
}
else if(rank[t]==0)
cout<<"Are you kidding?"<<endl;
else if(rank[t]==-1)
cout<<"Checked"<<endl;
else
{
cout<<"Chocolate"<<endl;
rank[t]=-1;
}
}
}
1060 爱丁顿数
水题。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,i,j,max=0;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
reverse(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
if(a[i]>i)
max=i;
}
cout<<max;
}