• 魔鬼PAT训练 DAY1


    魔鬼PAT训练 DAY1

    3.1.简单模拟

    B1001.害死人不偿命的(3n+1)猜想 (15')

    #include <iostream>
    using namespace std;
    int main() {
        int N, cnt = 0;
        scanf("%d", &N);
        while(N != 1) {
            if(N % 2 == 0) N /= 2;
            else N = (3 * N + 1) / 2;
            cnt++;
        }
        printf("%d", cnt);
        return 0;
    }
    

    B1011.A+B和C (15')

    #include <iostream>
    using namespace std;
    int main() {
        long long N, a, b, c;
        scanf("%d", &N);
        for(int i = 1; i <= N; i++) {
            scanf("%lld%lld%lld", &a, &b, &c);
            if(a + b > c) printf("Case #%d: true
    ", i);
            else printf("Case #%d: false
    ", i);
        }
        return 0;
    }
    

    B1016.部分A+B (15')

    #include <iostream>
    using namespace std;
    int main() {
        string s1, s2;
        int a, b, c = 0, d = 0;
        cin >> s1 >> a >> s2 >> b;
        for(int i = 0; i < s1.size(); i++)
            if(s1[i] - '0' == a) c = c * 10 + a;
        for(int i = 0; i < s2.size(); i++)
            if(s2[i] - '0' == b) d = d * 10 + b;
        printf("%d", c + d);
        return 0;
    }
    

    B1026.程序运行时间 (15')

    #include <iostream>
    using namespace std;
    int main() {
        long long a, b, c, sec, min, hour;
        scanf("%lld%lld", &a, &b);
        c = (b - a + 50) / 100;
        sec = c % 60;
        min = c / 60 % 60;
        hour = c / 3600;
        printf("%02lld:%02lld:%02lld", hour, min, sec);
        return 0;
    }
    

    B1046.划拳 (15')

    #include <iostream>
    using namespace std;
    int main() {
        int N, a, b, c, d, cnt1 = 0, cnt2 = 0;
        scanf("%d", &N);
        while(N--) {
            scanf("%d%d%d%d", &a, &b, &c, &d);
            if(a + c == b && a + c != d) cnt2++;
            if(a + c != b && a + c == d) cnt1++;
        }
        printf("%d %d", cnt1, cnt2);
        return 0;
    }
    

    B1008.数组元素循环右移问题 (20')

    #include <iostream>
    using namespace std;
    int main() {
        int N, M, arr[10000];
        scanf("%d%d", &N, &M);
        for(int i = 0; i < N; i++)
            scanf("%d", &arr[(i + M) % N]);
        for(int i = 0; i < N; i++)
            if(i == 0) printf("%d", arr[i]);
            else printf(" %d", arr[i]);
        return 0;
    }
    

    B1012.数字分类 (20')

    #include <iostream>
    using namespace std;
    int main() {
        int N, tmp, A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0;
        int flag = 1, cnt4 = 0;
        bool b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0;
        scanf("%d", &N);
        while(N--) {
            scanf("%d", &tmp);
            if(tmp % 10 == 0) {
                A1 += tmp;
                b1 = 1;
            }
            if(tmp % 5 == 1) {
                A2 += (flag * tmp);
                flag = -flag;
                b2 = 1;
            }
            if(tmp % 5 == 2) {
                A3++;
                b3 = 1;
            }
            if(tmp % 5 == 3) {
                A4+=tmp;
                cnt4++;
                b4 = 1;
            }
            if(tmp % 5 == 4 && tmp > A5) {
                A5 = tmp;
                b5 = 1;
            }
        }
        if(!b1) printf("N");
        else printf("%d", A1);
        if(!b2) printf(" N");
        else printf(" %d", A2);
        if(!b3) printf(" N");
        else printf(" %d", A3);
        if(!b4) printf(" N");
        else printf(" %.1f", (double)A4 / cnt4);
        if(!b5) printf(" N");
        else printf(" %d", A5);
        return 0;
    }
    

    B1018.锤子剪刀布 (20')

    #include <iostream>
    using namespace std;
    char max(int a, int b, int c){
        int max = a;
        max < b? max = b: 0;
        max < c? max = c: 0;
        if(max == c){
            return 'B';
        }else if(max == a){
            return 'C';
        }else{
            return 'J';
        }
    }
    int main()
    {
        int cnt;
        char a, b;
        int jy = 0,jp = 0;//甲胜利和平局
        int jc = 0, jj = 0, jb = 0, yc = 0, yj = 0, yb = 0;
        cin >> cnt;
        for(int i = 0; i < cnt; i++) {
            cin >> a >> b;
            if(a == b) jp++;
            else if((a == 'C' && b == 'J') || (a == 'J' && b == 'B') || (a == 'B'&&b == 'C')) {
                jy++;
                switch(a) {
                    case 'C': jc++; break;
                    case 'J': jj++; break;
                    case 'B': jb++; break;
                }
            }else {
                switch(b) {
                    case 'C': yc++; break;
                    case 'J': yj++; break;
                    case 'B': yb++; break;
                }
            }
        }
        cout << jy << " " << jp << " " << (cnt - jy - jp) << endl;
        cout << (cnt - jy - jp) << " " << jp << " " << jy << endl;
        cout << max(jc, jj, jb) << " " << max(yc, yj, yb);
        system("pause");
        return 0;
    }
    

    A1042.Shuffling Machine (20')

    #include <iostream>
    using namespace std;
    int main() {
        int N;
        int change[54];
        string card[] = {
            "S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "S12", "S13",
            "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10", "H11", "H12", "H13",
            "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", "C11", "C12", "C13",
            "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D10", "D11", "D12", "D13",
            "J1", "J2"};
        string cp[54];
        scanf("%d", &N);
        for(int i = 0; i < 54; i++)
            scanf("%d", &change[i]);
        while(N--) {
            for(int i = 0; i < 54; i++)
                cp[change[i] - 1] = card[i];
            for(int i = 0; i < 54; i++)
                card[i] = cp[i];
        }
        printf("%s", card[0].data());
        for(int i = 1; i < 54; i++)
            printf(" %s", card[i].data());
        system("pause");
        return 0;
    }
    
    

    A1046.Shortest Distance (20')

    (超时想到贪心)

    #include <iostream>
    #include <vector>
    using namespace std;
    int main() {
        int N, M, a, b, sum = 0;
        scanf("%d", &N);
        vector<int> dis(N + 1);
        dis[0] = 0;
        for(int i = 1; i <= N; i++) {
            scanf("%d", &dis[i]);
            sum += dis[i];
            dis[i] += dis[i - 1];
        }
        scanf("%d", &M);
        while(M--) {
            scanf("%d%d", &a, &b);
            if(a > b) swap(a, b);
            int len = dis[b - 1] - dis[a - 1];
            printf("%d
    ", min(sum - len, len));
        }
        return 0;
    }
    
    

    1065.A+B and C(64bit) (20')

    (大数问题想到Java)

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int N = sc.nextInt();
    		BigInteger A, B, C;
    		for(int i = 1; i <= N; i++) {
    			A = sc.nextBigInteger();
    			B = sc.nextBigInteger();
    			C = sc.nextBigInteger();
    			if(A.add(B).compareTo(C)>0)
    				System.out.printf("Case #%d: true
    ", i);
    			else
    				System.out.printf("Case #%d: false
    ", i);
    		}
    	}
    }
    
    

    B1010.一元多项式求导

    (多项式问题想到map)

    #include <iostream>
    using namespace std;
    int main() {
        int a, b, flag = 1;
        int m[10000] = {0};
        while(~scanf("%d%d", &a, &b)) {
            a *= b;
            b--;
            m[b] += a;
        }
        for(int i = 9999; i >= 0; i--) {
            if(m[i] != 0) {
                if(!flag) printf(" ");
                printf("%d %d", m[i], i);
                flag = 0;
            }
        }
        if(flag) printf("0 0");
        return 0;
    }
    
    

    A1002.A+B for Polynomials(25')

    (多项式问题想到map)

    #include <iostream>
    #include <map>
    using namespace std;
    int main()
    {
        int M, coef, coun=2;
        double expo;
        map<int, double, greater<int>> m;
        while(coun--){
            cin >> M;
            while(M--){
                cin >> coef >> expo;
                m[coef] += expo;
            }
        }
        for(auto it = m.begin(); it != m.end(); it++)
            if(it -> second == 0) m.erase(it);
        cout << m.size();
        for(auto it: m)
            printf(" %d %.1f", it.first, it.second);
        return 0;
    }
    
    

    A1009.Product of Polynomials(25')

    #include <iostream>
    #include <vector>
    #include <map>
    using namespace std;
    int main()
    {
        int M, N;
        scanf("%d", &M);
        vector<pair<int, double>> poly1(M);
        for(int i = 0; i < M; i++)
            scanf("%d%lf", &poly1[i].first, &poly1[i].second);
        scanf("%d", &N);
        vector<pair<int, double>> poly2(N);
        for(int i = 0; i < N; i++)
            scanf("%d%lf", &poly2[i].first, &poly2[i].second);
        map<int, double, greater<int>> m;
        for(int i = 0; i < poly1.size(); i++)
            for(int j = 0; j < poly2.size(); j++)
                m[poly1[i].first + poly2[j].first] += poly1[i].second * poly2[j].second;
        for(auto it = m.begin(); it != m.end(); it++)
            if(it->second == 0) m.erase(it);
        printf("%d", m.size());
        for(auto it = m.begin(); it != m.end(); it++)
            printf(" %d %.1f", it->first, it->second);
        system("pause");
        return 0;
    }
    
    

    3.2.查找元素

    B1041.考试座位号(15')

    #include <iostream>
    #include <map>
    using namespace std;
    int main() {
        int N, M, tmp_i;
        pair<string, int> tmp_p;
        map<int, pair<string, int>> m;
        scanf("%d", &N);
        for(int i = 0; i < N; i++) {
            cin >> tmp_p.first >> tmp_i >> tmp_p.second;
            m[tmp_i] = tmp_p;
        }
        scanf("%d", &M);
        while(M--) {
            scanf("%d", &tmp_i);
            printf("%s %d
    ", m[tmp_i].first.c_str(), m[tmp_i].second);
        }
        return 0;
    }
    
    

    B1004.成绩排名(20')

    #include <iostream>
    using namespace std;
    int main() {
        string x_max, m_max, x_min, m_min;
        string x_tmp, m_tmp;
        int N, s_max = -1, s_min = 1000, s_tmp;
        scanf("%d", &N);
        while(N--) {
            cin >> x_tmp >> m_tmp >> s_tmp;
            if(s_tmp > s_max) {
                s_max = s_tmp;
                x_max = x_tmp;
                m_max = m_tmp;
            }
            if(s_tmp < s_min) {
                s_min = s_tmp;
                x_min = x_tmp;
                m_min = m_tmp;
            }
        }
        printf("%s %s
    %s %s", x_max.data(), m_max.data(), x_min.data(), m_min.data());
        system("pause");
        return 0;
    }
    
    

    B1028.人口普查

    #include <iostream>
    using namespace std;
    int main() {
        int N, cnt = 0;
        scanf("%d", &N);
        string name_max, name_min, date_max = "", date_min = "9999/99/99";
        string name_tmp, date_tmp;
        while(N--) {
            cin >> name_tmp >> date_tmp;
            if(date_tmp <= "2014/09/06" && date_tmp >= "1814/09/06") {
                if(date_tmp > date_max) {
                    date_max = date_tmp;
                    name_max = name_tmp;
                }
                if(date_tmp < date_min) {
                    date_min = date_tmp;
                    name_min = name_tmp;
                }
                cnt++;
            }
        }
        if(cnt == 0) printf("0");
        else printf("%d %s %s", cnt, name_min.data(), name_max.data());
        return 0;
    }
    
    

    B1032.挖掘机技术那家强

    #include <iostream>
    #include <map>
    using namespace std;
    int main() {
        map<int, int, greater<int>> m;
        int a, b, N, mk, mv = 0;
        scanf("%d", &N);
        while(N--) {
            scanf("%d%d", &a, &b);
            m[a] += b;
        }
        for(auto x: m) {
            if(x.second > mv) {
                mk = x.first;
                mv = x.second;
            }
        }
        printf("%d %d", mk, mv);
        return 0;
    }
    
    

    A1011.World Cup Betting(20')

    #include <iostream>
    using namespace std;
    int main() {
        double m_num[3];
        double w, t, l, m;
        char m_char[3];
        for(int i = 0; i < 3; i++){
            scanf("%lf%lf%lf", &w, &t, &l);
            m = max(max(w, t), l);
            if(m == w){
                m_char[i] = 'W';
                m_num[i] = m;
            }else if(m == t){
                m_char[i] = 'T';
                m_num[i] = m;
            }else {
                m_char[i] = 'L';
                m_num[i] = m;
            }
        }
        double res = (m_num[0] * m_num[1] * m_num[2] * 0.65 - 1) * 2;
        printf("%c %c %c %.2f", m_char[0], m_char[1], m_char[2], res);
        return 0;
    }
    
    

    A1006.Sign In and Sign Out(25')

    #include <iostream>
    using namespace std;
    int main() {
        int M;
        scanf("%d", &M);
        string maxid, _max="", minid, _min="1111 1111", tmp, start, _end;
        while(M--) {
            cin >> tmp >> start >> _end;
            if(start < _min) {
                _min = start;
                minid = tmp;
            }
            if(_end > _max) {
                _max = _end;
                maxid = tmp;
            }
        }
        cout << minid << " " << maxid;
        return 0;
    }
    
    

    A1036.Boys vs Girls(25')

    #include <iostream>
    using namespace std;
    struct stu {
        string name = "Absent", sex, id;
        int grade;
    };
    int main() {
        int N;
        scanf("%d", &N);
        stu _max, _min, tmp;
        _max.grade = -1;
        _min.grade = 101;
        while(N--) {
            cin >> tmp.name >> tmp.sex >> tmp.id >> tmp.grade;
            if(tmp.sex == "F" && tmp.grade > _max.grade) _max = tmp;
            if(tmp.sex == "M" && tmp.grade < _min.grade) _min = tmp;
        }
        if(_max.name == "Absent") cout << _max.name << endl;
        else cout << _max.name << " " << _max.id << endl;
        if(_min.name == "Absent") cout << _min.name << endl;
        else cout << _min.name << " " << _min.id << endl;
        if(_max.name == "Absent" || _min.name == "Absent")
            cout << "NA" << endl;
        else cout << _max.grade - _min.grade << endl;
        system("pause");
        return 0;
    }
    
    

    3.3.图形输出

    B1036.跟奥巴马一起学编程

    #include <iostream>
    using namespace std;
    int main() {
        int N; char c;
        scanf("%d %c", &N, &c);
        for(int i = 0; i < N; i++) putchar(c);
        putchar('
    ');
        for(int i = 0; i < (double)N / 2 - 2; i++) {
            putchar(c);
            for(int j = 0; j < N-2; j++) putchar(' ');
            putchar(c);
            putchar('
    ');
        }
        for(int i = 0; i < N; i++) putchar(c);
        return 0;
    }
    
    

    B1027.打印沙漏(20')

    #include <iostream>
    using namespace std;
    int main() {
        int N, level = 0, cnt = 0, sum; char c;
        scanf("%d %c", &N, &c);
        while(2 * level * level - 1 <= N) level++;
        sum = 2 * (--level) * level -1;
        for(int i = level; i > 0; i--, cnt++){
            for(int j = 0; j < cnt; j++) putchar(' ');
            for(int j = 2 * i - 1; j > 0; j--) putchar(c);
            putchar('
    ');
        }
        cnt -= 2;
        for(int i = 2; i <= level; i++, cnt--) {
            for(int j = 0; j < cnt; j++) putchar(' ');
            for(int j = 2 * i - 1; j > 0; j--) putchar(c);
            putchar('
    ');
        }
        printf("%d", N - sum);
        system("pause");
        return 0;
    }
    
    

    A1031.Hello World for U (20')

    #include <iostream>
    using namespace std;
    int main() {
        string str;
        getline(cin, str);
        int row, N = str.length(), recol;
        row = (N + 2) / 3 ;
        recol = (N + 2) / 3 + (N + 2) % 3 - 2;
        for(int i = 0; i < row; i++){
            cout << str[i];
            for(int j = 0; j < recol; j++)
                if(i != row - 1) cout << " ";
                else cout << str[j + row];
            cout << str[N - i -1] << endl;
        }
        return 0;
    }
    
    

    3.5.进制转换

    B1022.D进制的A+B(20')

    #include <iostream>
    #include <stack>
    using namespace std;
    int main() {
        int A, B, D, sum;
        scanf("%d%d%d", &A, &B, &D);
        sum = A + B;
        if(sum == 0) putchar('0');
        stack<int> s;
        while(sum != 0) {
            s.push(sum % D);
            sum /= D;
        }
        while(!s.empty()) {
            printf("%d", s.top());
            s.pop();
        }
        return 0;
    }
    
    

    B1037.在霍格沃茨找零钱

    #include <iostream>
    using namespace std;
    int main() {
        int ag, as, ak, bg, bs, bk, rg, rs, rk;
        scanf("%d.%d.%d %d.%d.%d", &ag, &as, &ak, &bg, &bs, &bk);
        rg = bg - ag; rs = bs - as; rk = bk -ak;
        if(rg < 0 || (rg == 0 && rs < 0) || (rg == 0 && rs == 0 && rk < 0)) {
            putchar('-');
            rg = -rg;
            rs = -rs;
            rk = -rk;
        }
        while(rk < 0) {
            rs--;
            rk += 29;
        }
        while(rs < 0) {
            rg--;
            rs += 17;
        }
        printf("%d.%d.%d", rg, rs, rk);
        system("pause");
        return 0;
    }
    
    

    A1019.General Polindromic Number(20')

    #include <iostream>
    #include <deque>
    using namespace std;
    int main(){
        int N, R;
        cin >> N >> R;
        deque<int> d, dr;
        while(N != 0){
            d.push_back(N % R);
            dr.push_front(N % R);
            N /= R;
        }
        bool right = true;
        for(int i = 0; i < d.size(); i++)
            if(d[i] != dr[i]) right = false;
        cout << (right ? "Yes" : "No") << endl;
        for(int i = 0; i < dr.size(); i++)
            if(i != 0) cout << " " << dr[i];
            else cout << dr[i];
        return 0;
    }
    
    

    A1027.Color in Mars(20')

    #include <iostream>
    using namespace std;
    int main() {
        int a, b, c;
        char ch[] = "0123456789ABC";
        scanf("%d%d%d", &a, &b, &c);
        printf("#%c%c%c%c%c%c", ch[a/13], ch[a%13], ch[b/13], ch[b%13], ch[c/13], ch[c%13]);
        return 0;
    }
    
    

    A1058.A+B in Hogwarts(20')

    #include <iostream>
    using namespace std;
    int main(){
        int a,b,c,d,e,f;
        scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&d,&e,&f);
        a+=d;b+=e;c+=f;
        b+=c/29;c%=29;
        a+=b/17;b%=17;
        printf("%d.%d.%d",a,b,c);
        return 0;
    }
    
    
  • 相关阅读:
    phpmailer发送邮件,可以带附件
    poj 3370 鸽笼原理知识小结
    yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
    兄弟单词查询
    asp.net mvc3 利用Ajax实现局部刷新
    eclipse 找不到application选项
    ECharts一个强大的商业产品图表库
    多校训练hdu --Nice boat(线段树,都是泪)
    [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
    ubuntu重新启动网卡
  • 原文地址:https://www.cnblogs.com/littlepage/p/12345354.html
Copyright © 2020-2023  润新知