PAT (Basic Level) Practice (中文)

1001 害死人不偿命的(3n+1)猜想 (15 分)
按题意进行操作即可

#include
using namespace std;
#define LL long long int
int main()
{
    int n,res=0;
    scanf("%d",&n);
    while(n!=1)
    {
        if(n&1)
            n=(3*n+1)/2;
        else n/=2;
        res++;
    }
    printf("%d\n",res);
    return 0;
}

1002 写出这个数 (20 分)
由于结果最大为900左右,所以也可直接求出个十百位然后输出。

#include
using namespace std;
#define LL long long int
char c[110];
string s[11]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
    cin>>c;
    int res=0;
    for(int i=0;c[i];i++)
        res+=c[i]-'0';
    int x=1;
    while(x<=res) x*=10;
    x/=10;
    int p=0;
    while(x)
    {
        if(p++) cout<<" ";
        cout<<s[res/x];
        res%=x;x/=10;
    }
    return 0;
}

1003 我要通过! (20 分)
题意一直没弄清楚。
总而言之第一部分判断是字符串只能出现‘P’‘A’‘T’三个英文字母且三个字母都要出现还有就是‘P’、‘T’仅出现1次,第二部分判断结合条件2、3,通过“如果‘aPbTc’是正确的,那么‘aPbATca’也是正确的”该句话可得出‘P’前面‘A’的数量乘以‘P’‘T’中间的‘A’的数量必须要等于‘T’后面‘A’的数量。(条件2是条件3的特殊情况)

#include
using namespace std;
#define LL long long int
char c[110];
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        cin>>c;
        int lenc=strlen(c);
        int p=0,a=0,t=0,s=0;
        for(int i=0;c[i];i++)
        {
            if(c[i]=='P') p++;
            else if(c[i]=='A') a++;
            else if(c[i]=='T') t++;
            else {s=1;break;}
        }
        if(!s&&p==1&&t==1&&a)
        {
            int l=0,r=0;a=0;
            for(int i=0;c[i];i++)
            {
                if(c[i]=='P') {p=0;continue;}
                if(c[i]=='T') {t=0;continue;}
                if(p) l++;
                if(!p&&t) a++;
                if(!t) r++;
            }
            if(l*a==r) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

1004 成绩排名 (20 分)
结构体排序

#include
using namespace std;
#define LL long long int
int n;
struct node
{
    string name,num;
    int sc;
}s[1010];
bool cmp(node a,node b)
{
    return a.sc<b.sc;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>s[i].name>>s[i].num>>s[i].sc;
    sort(s,s+n,cmp);
    cout<<s[n-1].name<<" "<<s[n-1].num<<endl;
    cout<<s[0].name<<" "<<s[0].num<<endl;
    return 0;
}

1005 继续(3n+1)猜想 (25 分)
日常看不懂题意。
找出哪些数是当前这些数进行计算时覆盖不到的即可。

#include
using namespace std;
#define LL long long int
int n;
int s[110];
bool vis[110];
bool cmp(int a,int b){return a>b;}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>s[i];
        int x=s[i];
        while(x!=1)
        {
            if(x&1) x=(x*3+1)>>1;
            else x>>=1;
            if(x<=100) vis[x]=1;
        }
    }
    int p=0;
    sort(s,s+n,cmp);
    for(int i=0;i<n;i++)
    {
        if(!vis[s[i]])
        {
            if(p++) cout<<" ";
            cout<<s[i];
        }
    }
    cout<<endl;
    return 0;
}

1006 换个格式输出整数 (15 分)
直接输出即可

#include
using namespace std;
#define LL long long int
int num,a,b,c;
int main()
{
    cin>>num;
    a=num/100;
    b=num/10%10;
    c=num%10;
    if(a)
    for(int i=1;i<=a;i++)
        cout<<"B";
    if(b)
    for(int i=1;i<=b;i++)
        cout<<"S";
    if(c)
    for(int i=1;i<=c;i++)
        cout<<i;
    cout<<endl;
    return 0;
}

1007 素数对猜想 (20 分)
暴力计算

#include
using namespace std;
#define LL long long int
int n;
bool prime(int x)
{
    for(int i=2;i<=sqrt(x);i++)
        if(x%i==0) return 0;
    return 1;
}
int main()
{
    cin>>n;
    int res=0;
    for(int i=5;i<=n;i+=2)
    {
        if(prime(i)&&prime(i-2))
            res++;
    }
    cout<<res<<endl;
    return 0;
}

1008 数组元素循环右移问题 (20 分)
直接输出即可,m要对n取余。

#include
using namespace std;
#define LL long long int
int n,m;
int s[110];
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
        cin>>s[i];
    int p=0;
    m%=n;
    for(int i=0;i<n;i++)
    {
        if(p++) cout<<" ";
        cout<<s[(n-m+i)%n];
    }
    cout<<endl;
    return 0;
}

1009 说反话 (20 分)
遇到空格输出字段即可,此处不支持gets(),可使用cin.get(char*,size)。

#include
using namespace std;
#define LL long long int
char c[110];
int main()
{
    cin.get(c,100);
    int x;
    int len=strlen(c);
    for(int i=len-1;i>=0;i--)
    {
        if(c[i]==' ')
        {
            x=i+1;
            while(x<len&&c[x]!=' ')
                cout<<c[x++];
            cout<<' ';
        }
    }
    x=0;
    while(x<len&&c[x]!=' ')
        cout<<c[x++];
    cout<<endl;
    return 0;
}

1010 一元多项式求导 (25 分)
将系数与指数相乘输出即可,特殊判断零多项式的情况。

#include
using namespace std;
#define LL long long int
int a[1010];
int b[1010];
int main()
{
    int cmp=0;
    while(cin>>a[cmp]>>b[cmp])cmp++;
    int p=0;
    for(int i=0;i<cmp;i++)
    {
        if(b[i])
        {
            if(p++) cout<<" ";
            cout<<a[i]*b[i]<<" "<<b[i]-1;
        }
    }
    if(!p) cout<<"0 0"<<endl;
    return 0;
}

1011 A+B 和 C (15 分)
直接输入比较即可,这道题应该是考察数据范围,用一下long long int 就可以了

#include
#include
using namespace std;
#define LL long long int
int T;
LL a,b,c;
int main()
{
    cin>>T;
    int cs=0;
    while(T--)
    {
        cin>>a>>b>>c;
        if(a+b>c)
            printf("Case #%d: true\n",++cs);
        else
            printf("Case #%d: false\n",++cs);
    }
    return 0;
}

1012 数字分类 (20 分)
直接按照题意做就好了,刚开始看到题目中数据都为正整数,所以初始化所有结果为-1,结果最后一组样例过不了。想了一下因为A2有加有减,可能最后结果同样为-1,导致结果出错。就又设了一个变量记录A2是否存在,将结果的初始化改为初始化为0,这样是对的。

#include
#include
#include
#include
using namespace std;
#define LL long long int
int n,k;
int a[9];
int main()
{
    while(cin>>n)
    {
        int cmp=1;
        int cnt=0;
        bool flag=0;
        memset(a,0,sizeof(a));
        while(n--)
        {
            cin>>k;
            if(k%5==0&&k%2==0)
                a[1]+=k;
            if(k%5==1)
                a[2]+=cmp*k,cmp*=-1,flag=1;
            if(k%5==2)
                a[3]++;
            if(k%5==3)
                a[4]+=k,cnt++;
            if(k%5==4&&k>a[5])
                a[5]=k;
        }
        int p=0;
        for(int i=1;i<=5;i++)
        {
            if(p++) printf(" ");
            if(i==2)
            {
                if(flag)
                    printf("%d",a[i]);
                else printf("N");
            }
            else if(i==4)
            {
                if(a[i])
                    printf("%.1f",a[i]*1.0/cnt);
                else printf("N");
            }
            else
            {
                if(a[i])
                    printf("%d",a[i]);
                else printf("N");
            }
        }
    }
    return 0;
}

未完待续

你可能感兴趣的:(杂,PAT)