美文网首页
PAT-basic/advanced

PAT-basic/advanced

作者: yz_wang | 来源:发表于2018-02-28 17:09 被阅读0次

1017 -本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

超位数,要用字符串来做。

1029 有两个测试点通不过,待查

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <iostream>
#include <algorithm>
#include <string.h>


using namespace std;


class Solution{
public:

};

int main()
{
    string s1,s2;
    vector<char> res;
    getline(cin,s1);
    getline(cin,s2);
    for(int i=0;i<s1.size();i++){
        if(s1[i] >= 'a'&&s1[i] <= 'z')
            s1[i] -= 32;
    }
    for(int i=0;i<s2.size();i++){
        if(s2[i] >= 'a'&&s2[i] <= 'z')
            s2[i] -= 32;
    }

    unordered_map<char,int> origin,actual;
    for(int i=0;i<s1.size();i++)
        origin[s1[i]]++;
    for(int i=0;i<s2.size();i++)
        actual[s2[i]]++;

    for(auto it=origin.begin();it!=origin.end();it++){
        //cout << " " << it->first << ":" << it->second<<endl;
        if(actual[it->first]==0 && it->second>0)
            res.push_back(it->first);
    }
    for(int i=res.size()-1;i>=0;i--)
        cout<<res[i];
    cout<<endl;

    system("pause");
    return 0;

}

1062. 最简分数(20)
坑1:不一定是真分数
坑2:一开始用的float N1/N2作为边界,两个点未通过,后来改成double,变成了一个点未通过

#include <stdio.h>

int gcd(int a, int b)
{
    for(int r; (r = a % b); a = b, b = r) ;
    return b;
}

int main()
{
    int N1, N2, M1, M2, K, L, count = 0;
    scanf("%d/%d %d/%d %d", &N1, &M1, &N2, &M2, &K);
    
    if(N1 * M2 > N2 * M1)
    {
        L = N1, N1 = N2, N2 = L;
        L = M1, M1 = M2, M2 = L;
    }
    
    for(L = N1 * K / M1 + 1; N2 * K > M2 * L; L++)  if(gcd(L, K) == 1)
        printf("%s%d/%d", count++ ? " " : "", L, K);
            
    return 0;
}

1071题目很简单,一个坑是输出有两个空格,题目给的格式是错的,得按照给的输出样例的格式来。
但是就是有两个测试点通不过。原因是要把game over放在最后。

#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

void judge(unordered_map<char,int> bad, char c, int flag){

}

int main(void){
   int t,k;
   cin>>t>>k;
   for(int i=0;i<k;i++){
        int n1,b,n2;
        long long h;
        cin>>n1>>b>>h>>n2;
        if(t<=0){
            cout<<"Game Over";
            break;
        }
        else if(t-h<0){
            cout<<"Not enough tokens.  Total = "<<t<<"."<<endl;
        }
        else if((b==1 && n2>n1) || (b==0 && n2<n1) ){
                t+=h;
                cout<<"Win "<<h<<"!  Total = "<<t<<"."<<endl;
        }
        else{
            t-=h;
            cout<<"Lose "<<h<<".  Total = "<<t<<"."<<endl;
        }

   }


    system("pause");
    return 0;

}


advanced

1023. Have Fun with Numbers (20)
超过19位的就要用数组,然而有一个测试点通不过,没找到原因

#include <iostream>
#include <stack>
#include <queue>
#include <math.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

void judge(unordered_map<char,int> bad, char c, int flag){

}
int compare(string a,string b)
{
    for(int i=0; i<8; i++)
    {
        if(a[i]-b[i]>0)
            return 1;
        if(a[i]-b[i]<0)
            return 0;
    }
    return 0;
}

int main(void){

   unordered_map<int,int> mp1,mp2;
   int num1[40],num2[40];
   int i=0;
   char c;
   while((c=getchar()) != '\n'){
        num1[i]=c-'0';
        mp1[num1[i]]++;
        i++;
   }
   int f=0; //jinwei
   int cnt=i; //weishu
   i--;
   for(int j=i;j>=0;j--){
        int temp=num1[i]*2;
        if(temp+f<10){
           num2[j]=temp+f;
           mp2[num2[j]]++;
           f=0;
           }
        else{
            num2[j]=temp-10+f;
            mp2[num2[j]]++;
            f=1;
        }
        i--;
   }
   if(f==1)
        mp2[1]++;

   int flag=0;
   for(auto it=mp1.begin();it!=mp1.end();it++){
        if(it->second != mp2[it->first]){
            flag=1;
            break;
        }
   }
   if(flag == 0){
        cout<<"Yes"<<endl;
        if(f==1) cout<<1;
        for(int p=0;p<cnt;p++)
            cout<<num2[p];
   }

   if(flag == 1){
        cout<<"No"<<endl;
        if(f==1) cout<<1;
        for(int p=0;p<cnt;p++)
            cout<<num2[p];
   }

   system("pause");
   return 0;

}


相关文章

网友评论

      本文标题:PAT-basic/advanced

      本文链接:https://www.haomeiwen.com/subject/yufxnxtx.html