PAT

PAT ,第1张

目录

1051 复数乘法

1052 卖个萌

1053 住房空置率

1054 求平均值

1055 集体照

1056 组合数的和

1057 数零壹

1058 选择题

1059 C语言竞赛

1060 爱丁顿数


1051 复数乘法

AC主要考察细节,比如:

(1)12、13行,如果-0.005

(2)16行的判断条件,如果虚部为负就不用添加运算符号,若是正数要手动加+号。

#include
#include
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
#include
#include
using namespace std;

int main()
{
    vector> 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>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? @\/@"<

1053 住房空置率

写的时候12和17行写顺手了写了while(N--),结果全错,因为N和n不能改动。

#include
#include
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;
        int counter=0;
        for(int j=0;j>temp;
            if(tempn/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<

1054 求平均值

(1)注意几个不合法类型:

小数点出现了一次以上;

如果长度为1且仅有负号;

小数点后超过两位;

在区间之外;

负号出现了一次以上;

如果长度为1且仅有小数点;

(最后两种我写的时候也没有考虑到..)

(2)第42行的fabs()要记得添加cmath头文件;

(3)第57行的情况注意输出格式中,要写number而不是numbers不然测试点2会报错(说实话这里根本没想到,还是看的别人的题解才明白TT)(P.S.话说为什么0个都能用复数1个要用单数)。

#include
#include
#include
#include
#include
using namespace std;

int main()
{
    int n;
    cin>>n;
    vector v;
    while(n--)//判定以及填充容器过程
    {
        string s;
        cin>>s;
        int OneMinus=0;//是否仅有负号
        int point=0;//小数点个数
        int alpha=0;//字母个数
        int pos=0;//小数点位置
        for(int i=0;i0)
            cout<<"ERROR: "<0)
            cout<<"ERROR: "<1)
            cout<<"ERROR: "<2)
            cout<<"ERROR: "<1000)
            cout<<"ERROR: "<

1055 集体照

参考了这位博主的题解;

主要难点应该填充output[m]的那块代码;

写的时候我又想当然地写了while(row--),结果测试点0和测试点4出错,因为row变量在执行段里用到了,这毛病最近犯好多次T^T。

#include
#include
#include
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>n>>k;
    vector student(n);
    for(int i=0;i>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 output(m);
        output[m/2]=student[t].name;
        //left
        int j=m/2-1;
        for(int i=t+1;i

1056 组合数的和

找出14行公式即可。

#include
using namespace std;

int main()
{
    int n,a[10];
    cin>>n;
    int sum=0;
    for(int i=0;i>a[i];
        sum+=a[i];
    }
    sum=sum*(n-1)*11;
    cout<

1057 数零壹

字母先转小写再处理相加。

#include
#include
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<

1058 选择题

(1)参考了这篇题解;

(2)别忘了28行的getchar()。

#include
#include
#include
#include
using namespace std;

int main()
{
    int N,M;
    cin>>N>>M;
    vector> right(M);
    int score[M]={0};
    int WrongCnt[M]={0};
    
    for(int i=0;i>s>>o>>r;
        for(int j=0;j>rightans;
            right[i].insert(rightans);
        }
        score[i]=s;
    }
    
    getchar();
    for(int i=0;i 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<

1059 C语言竞赛

(1)思路:因为id是四位数字,所以创一个长度一万的数组,id作为下标内容是排名;

(2)35行要用printf限定长度,因为如果用cout不方便补前置0;

(3)isPrime()这个函数体中,第10行的for循环条件如果写i

(4)debug最久的点在于最终输出时,判定素数的部分如果你第6行没有考虑到0和-1不算素数,那要注意把这个if判定加在rank[i]==0和-1都判定完之后。

#include
#include
using namespace std;
bool isPrime(int x)
{
    if(x<=1)
        return false;
    if(x==2)
        return true;
    for(int i=2;i>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"<

1060 爱丁顿数

水题。

#include
#include
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<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)