PAT真题1001

真题1001:自己答案:

#include

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     {
        s1[j+1]=s[i-j];
    }
    
    for(int j=0;j     {
        if(s1[j]=='-')
            printf("%c",s1[j]);
        else if(s1[j]==',')
            printf("%c",s1[j]);
        else
            printf("%d",(int)s1[j]);
    }
    

其他答案:

#include

#include

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

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<     string s=ss.str();

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

    int len=s.length();

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

    for(int i=0;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< cout<

//    cout< //    for(int i=0;i //    {
//        cout< //
//    }

}

//void out(sum,)
 

 

参考代码:

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

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<     string s=ss.str();

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


    int len=s.length();

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

//    cout<     
    if(sum==0)
    {
        cout<<"zero"; 
    }
    else
    {
        cout<

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

}

 

 

总结:

 

 

1008

 

自己答案:

#include
#include
#include
#include

using namespace std;

int a[100];

int main()
{
    int n,t;

    cin>>n;
    
    for(int i=0;i     {
        cin>>a[i];
    }
//    cout<     t=a[0]*6+5;
//    cout<     
    for(int i=1;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<

}

 

其他答案:

 

总结:

 

1011

自己答案:

#include
#include
#include
#include

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

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<             cout<<"Yes"<         }
        else
            cout<<"No"<         
        cin>>n;
        if(n<0)
            break;
        cin>>d;
        
        
        
    }
}

bool isPrime(int p)
{
    for(int i=2;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
#include
#include
#include

using namespace std;

bool isP(int p,int t);


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

    if(isP(n,d))
    {
        cout<<"Yes"<     }
    else
        cout<<"No"<     
    vector 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<     
    cout<     
    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
#include
#include
#include
using namespace std;
 
int main()
{
    int i;
    vector 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         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"<         for(i=n2.size()-1;i>=0;i--){
            cout<         }
    }else{
        vector a(n2);
        sort(n.begin(),n.end());
        sort(n2.begin(),n2.end());
        int flag=1;
        for(i=0;i             if(n[i]!=n2[i]){
                cout<<"No"<                 flag=0;
                break;
            }
        }
        if(flag==1){
            cout<<"Yes"<         }
        for(i=a.size()-1;i>=0;i--){
            cout<         }
    }
    return 0;
}
 

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

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

#include
#include
using namespace std;
/*
c++如何返回一个容器举例:
常用方法:将容器引用当作参数传入函数中
*/
void test(vector&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 t;//定义vector容器
    test(t,n);//将容器当参数,调用函数
    for(size_t i=0;i!=t.size();i++)//输出容器内容,验证效果
        cout<     return 0;
}
 

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

 

 

1027

自己代码:

#include
#include
#include
#include

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

int main()
{
    int a,b,c;
    cin>>a;
    cin>>b;
    cin>>c;
    
    vector 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<     }
    
    
    vector p2; 
    rever(p2,b);
    int t2=p2.size();
    if(t2<2)
        t2=t2+1;
        p1.push_back(0); 
//    cout<     for(int i=t2-1;i>=0;--i)
    {
        cout<     }
    
    
    vector 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<     }
    
}
 
void rever(vector&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
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一个一个对应的值。考虑到使用字符数组来对应更加方便:

 

 

你可能感兴趣的:(PAT真题1001)