PAT真题1001

真题1001:自己答案:

#include<stdio.h>

char s[100];

int main()
{
    int a,b,t=1,i=0,k=0,sum;
    
    
    scanf("%d%d",&a,&b);
    
    sum=a+b;
    
    if(sum<0);
    {
        t=-1;
        sum=t*sum;
    }
    
    
    while(sum/10>0)
    {
        if(k==3)
        {
            s[i]=','; 
            ++i;
            k=k-3;
        }
        else
        {
            s[i]=sum%10;
            ++i;
            ++k;
            
            sum/=10;
        }
    }
    
    s[i]=sum;
    
    
    char s1[100];
    if(t==-1)
    {
        s1[0]='-';
    }
    
    for(int j=0;j<i+1; ++j)
    {
        s1[j+1]=s[i-j];
    }
    
    for(int j=0;j<i+2;++j)
    {
        if(s1[j]=='-')
            printf("%c",s1[j]);
        else if(s1[j]==',')
            printf("%c",s1[j]);
        else
            printf("%d",(int)s1[j]);
    }
    

其他答案:

#include <iostream>

#include<sstream>

using namespace std;
int main() {
    stringstream ss;
    int a, b;
    cin >> a >> b;
    ss<<(a+b);
    string s = ss.str();
    int len = s.length();
    for (int i = 0; i < len; i++) {
        cout << s[i];
        if (s[i] == '-')
            continue;
        if ((i + 1) % 3 == len % 3 && i != len - 1)
            cout << ",";
    }
    return 0;
}

 

 

总结:

 

 

PAT 1005:

我的代码:

#include <iostream>
#include<sstream>
#include<cstdio>
#include<string>
#include <typeinfo>

using namespace std;

int main()
{
    int n,sum=0;
    stringstream ss;
    cin>>n;

    while(n/10>0)
    {
        sum+=n%10;
        n/=10;
    }
    sum+=n;

    ss<<sum;
    string s=ss.str();

//  cout<<(int)s[1];      //char型字符无法直接强制int型为对应的整型,会变成对应的ascii码值。应该使用s[1]-'0'得到对应的整形

    int len=s.length();

//    cout<<len;
    string out[len+1];

    for(int i=0;i<len;i++)
    {
        switch ((int)s[i])
        {
            case 0:
                out[i]="zero";
                
            case 1:
                out[i]="one";
            case 2:
                out[i]="two";
            case 3:
                out[i]="three";
            case 4:
                out[i]="four";
            case 5:
                out[i]="five";
            case 6:
                out[i]="six";
            case 7:
                out[i]="seven";
            case 8:
                out[i]="eight";
            case 9:
                out[i]="nine";
         }
    }
    
cout<<typeid(out[1]).name() << endl;
cout<<out[1] << endl;

//    cout<<out<<endl;
//    for(int i=0;i<len;i++)
//    {
//        cout<<typeid(out).name() << endl;
//
//    }

}

//void out(sum,)
 

 

参考代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    string s[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    string a;
    cin >> a;
    int sum = 0;
    for(int i = 0; i < a.length(); i++) {
        sum += (a[i] - '0');
    }
    vector<int> v;
    while(sum != 0) {
        v.push_back(sum % 10);
        sum = sum / 10;
    }
    int len = v.size();
    if(len == 0) { // if sum == 0 print zero else print s[v[len - 1]] 鍚﹀垯浼氭閿欒
        cout << s[0];
    } else {
        cout << s[v[len - 1]];
    }
    for(int i = len - 2; i >= 0; i--) {
        cout << " " << s[v[i]];
    }
    return 0;
}

 

我的代码修改后:

#include <iostream>
#include<sstream>
#include<cstdio>
#include<string>
#include <typeinfo>

using namespace std;

int main()
{
    int n,sum=0;
    stringstream ss;
    cin>>n;

    while(n/10>0)
    {
        sum+=n%10;
        n/=10;
    }
    sum+=n;

    ss<<sum;
    string s=ss.str();

//    cout<<(s[1]-'0');


    int len=s.length();

//    cout<<len;
    string out[10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; 

//    cout<<out[5];
    
    if(sum==0)
    {
        cout<<"zero"; 
    }
    else
    {
        cout<<out[s[0]-'0'];

        for(int i=1;i<len;i++)
        {
            if(s[i]-'0'==0)
            {
                cout<<"zero"; 
            }
            else
                cout<<" "<<out[s[i]-'0'];
        }
    }

}

 

 

总结:

 

 

1008

 

自己答案:

#include<iostream>
#include<cstdio>
#include<string>
#include<sstream>

using namespace std;

int a[100];

int main()
{
    int n,t;

    cin>>n;
    
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
//    cout<<a[0];
    t=a[0]*6+5;
//    cout<<t;
    
    for(int i=1;i<n;i++)
    {
        if(a[i]>a[i-1])
        {
            t+=((a[i]-a[i-1])*6+5);
        
        }
        else
        {
            t+=((a[i-1]-a[i])*4+5);
        }
    }

    cout<<t;

}

 

其他答案:

 

总结:

 

1011

自己答案:

#include<iostream>
#include<cstdio>
#include<string>
#include<sstream>

using namespace std;

double a[3][3],b[3];


int main()
{
    double t,mx=0;
    int n;
    
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            cin>>a[i][j];
        }
    }
    
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            if(a[i][j]>mx)
            {
                mx=a[i][j];
                n=j;
            }
        }
        
//        cout<<mx<<" ";
//        cout<<n;
        if(n==0)
            cout<<"W"<<" ";
            
        else if(n==1)
            cout<<"T"<<" ";
            
        else
            cout<<"L"<<" ";
        
        b[i]=a[i][n];
    }
    
    t=(b[0]*b[1]*b[2]*0.65-1)*2;
    
    printf("%.2lf",t);    //结果为37.97总觉得是答案错了
    

}

 

其他答案:

 

总结:

 

 

1015

 

自己答案:

#include<cstdio>
#include<iostream>
#include<cmath>

using namespace std;

bool isPrime(int p);
int revers(int a,int b);

int main()
{
    int n,d;
    
    cin>>n;
    cin>>d;
    
    while(n>0)
    {
        if(isPrime(n)&&isPrime(revers(n,d)))
        {
//            cout<<revers(n,d);
            cout<<"Yes"<<endl;
        }
        else
            cout<<"No"<<endl;
        
        cin>>n;
        if(n<0)
            break;
        cin>>d;
        
        
        
    }
}

bool isPrime(int p)
{
    for(int i=2;i<p;i++)
    {
        if(p%i==0)
            return false;
    }
    return 1;
}

int revers(int a,int b)
{
    int s=0;
    while(a/b>0)
    {
        s=s*b+a%b;
        a=a/b;            
    }
    s=s*b+a;
    return s;
}

不知道为啥显示答案错误;

参考代码:

 

1019 

自己代码:

#include<cstdio>
#include<iostream>
#include<cmath>
#include <vector>

using namespace std;

bool isP(int p,int t);


int main()
{
    int n,d;
    
    cin>>n>>d;
    

    if(isP(n,d))
    {
        cout<<"Yes"<<endl;
    }
    else
        cout<<"No"<<endl;
    
    vector<int> pp;
    int i=0;
    
    while(n/d>0)
    {
        pp.push_back(n%d);
        ++i;
        n=n/d;            
    }
    pp.push_back(n);
    

    for(int j=i;j>0;--j)
        cout<<pp[j]<<" ";
    
    cout<<pp[0];
    
    return 0;
}

bool isP(int p,int t)
{
    int p1=0,p2=p,a;
    
    while(p/t>0)
    {
        p1=p1*t+p%t;
        p=p/t;            
    }
    
    p1=p1*t+p;

    if(p1==p2)
        return true;
    else
        return false;
}
 

参考代码;

 

总结:

这里使用到了容器:贼好用

 

1023 

参考代码:


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
 
int main()
{
    int i;
    vector<int> n,n2;
    string c;
    cin>>c;
    for(i=c.size()-1;i>=0;i--){
        int t=c[i]-'0';
        n.push_back(t);
    }
 
    int d=0;
    for(i=0;i<n.size();i++){
        if(n[i]*2+d>=10){
            n2.push_back(n[i]*2-10+d);
            d=1;
        }else{
            n2.push_back(n[i]*2+d);
            d=0;
        }
    }
    if(d==1){
        n2.push_back(1);
    }
 
    if(n.size()!=n2.size()){
        cout<<"No"<<endl;
        for(i=n2.size()-1;i>=0;i--){
            cout<<n2[i];
        }
    }else{
        vector<int> a(n2);
        sort(n.begin(),n.end());
        sort(n2.begin(),n2.end());
        int flag=1;
        for(i=0;i<n.size();i++){
            if(n[i]!=n2[i]){
                cout<<"No"<<endl;
                flag=0;
                break;
            }
        }
        if(flag==1){
            cout<<"Yes"<<endl;
        }
        for(i=a.size()-1;i>=0;i--){
            cout<<a[i];         //size的长度包含字符串的 /0。而len 的不包含;
        }
    }
    return 0;
}
 

总结:这里还是使用了容器。输入长数字从里面取出数字的操作,可以借用字符串与容器完成,方便快捷。记得使用STL的排序算法,凡是涉及到顺序的;

函数返回容器的方法:指针容器:

#include<iostream>
#include<vector>
using namespace std;
/*
c++如何返回一个容器举例:
常用方法:将容器引用当作参数传入函数中
*/
void test(vector<int>&a,int n)
{
    for(int i=0;i!=n;i++)
    //  a[i]=i;
      a.push_back(i);
}

using namespace std;
int main()
{
    int n=10;
    vector<int> t;//定义vector容器
    test(t,n);//将容器当参数,调用函数
    for(size_t i=0;i!=t.size();i++)//输出容器内容,验证效果
        cout<<t[i]<<" ";
    return 0;
}
 

求容器的长度用.size(); int t=p1.size();;;

 

 

1027

自己代码:

#include<cstdio>
#include<iostream>
#include<iomanip>
#include<vector>

using namespace std;
void rever(vector<char>&p, int n);

int main()
{
    int a,b,c;
    cin>>a;
    cin>>b;
    cin>>c;
    
    vector<char> p1;
    cout<<"#";
    rever(p1,a);
    int t=p1.size();
    if(t<2)
        t=t+1;
        p1.push_back(0); 
    for(int i=t-1;i>=0;--i)
    {
        cout<<p1[i];
    }
    
    
    vector<char> p2; 
    rever(p2,b);
    int t2=p2.size();
    if(t2<2)
        t2=t2+1;
        p1.push_back(0); 
//    cout<<t2;
    for(int i=t2-1;i>=0;--i)
    {
        cout<<p2[i];
    }
    
    
    vector<char> p3; 
    rever(p3,c);
    int t3=p3.size();
    if(t3<2)
        t3=t3+1;
        p1.push_back(0); 
    for(int i=t3-1;i>=0;--i)
    {
        cout<<p3[i];
    }
    
}
 
void rever(vector<char>&p, int n)
{
    
    while(n%13>0)
    {
        char d;
        switch(n%13){
            case 0:
                d='0';
                break;
            case 1:
                d='1';
                break;
            case 2:
                d='2';
                break;
            case 3:
                d='3';
                break;
            case 4:
                d='4';
                break;
            case 5:
                d='5';
                break;
            case 6:
                d='6';
                break;
            case 7:
                d='7';
                break;
            case 8:
                d='8';
                break;
            case 9:
                d='9';
                break;
            case 10:
                d='A';
                break;
            case 11:
                d='B';
                break;
            case 12:
                d='C';
                break;                        
        }
        p.push_back(d);
        n/=13; 
    }
    
}

参考答案:

#include <iostream>
using namespace std;
int main() {
    char c[14] = {"0123456789ABC"};
    printf("#");
    for(int i = 0; i < 3; i++) {
        int num;
        scanf("%d", &num);
        printf("%c%c", c[num/13], c[num%13]);
    }
    return 0;
}

总结:我的代码更好。但是凡涉及对应的使用switch一个一个对应的值。考虑到使用字符数组来对应更加方便:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值