PAT乙級(不定時更新)


無聊切題,無聊題解.

1001

題解
暴力模擬

代碼

#include <bits/stdc++.h>

int main()
{
        int n, ans = 0;
        scanf("%d", &n);
        while (n != 1)
        {
                if (n&1)
                        n = (3*n+1)/2;
                else
                        n /= 2;
                ans ++;
        }
        printf("%d", ans);

        return 0;
}

1002

題解
暴力模擬

代碼

#include <bits/stdc++.h>

const char _[11][11]  = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };

int main()
{
        int ans = 0, t;
        while (scanf("%1d", &t) != EOF)
                ans += t;
        char s[110];
        sprintf(s, "%d", ans);
        for (int i = 0, len = strlen(s); i < len; i++)
                printf("%s%c", _[s[i]-'0'], i == len-1 ? '\n' : ' ');

        return 0;
}

1003

題解
如果串出現除了P、A、T三個字母之外的字母直接輸出"NO" .
其餘情況看下面的代碼就懂了 .

代碼

#include <bits/stdc++.h>

int n;
char s[110];

int main()
{
        scanf("%d", &n);
        while (n--)
        {
                int flag = 1;
                scanf("%s", s);
                int len = strlen(s);
                int a1 = 0, a2 = 0, a3 = 0;
                int P = 0,T = 0;
                for (int i = 0; i < len; i++)
                {
                        if (s[i] != 'P' && s[i] != 'A' && s[i] != 'T')
                        {
                                flag = 0;
                                break;
                        }
                        if (s[i] == 'P')
                                P++;
                        if (s[i] == 'T')
                                T++;
                        if (s[i] == 'A')
                        {
                                if (!P)
                                        a1++;
                                else
                                        T ? a3++ : a2++;
                        }
                }
                if (P != 1 || T != 1 || !a2)
                        flag = 0;
                if (a1 && (a3 % a1 != 0 || a2 > a3/a1))
                        flag = 0;

                printf("%s\n", flag ? "YES" : "NO");
        }

        return 0;
}

1004

題解
暴力模擬

代碼

#include <bits/stdc++.h>

int n;
struct _
{
        char s1[15], s2[15];
        int grades;
} __[110];

int main()
{
        scanf("%d", &n);
        int a = 1, b = 1;
        for (int i = 1; i <= n; i++)
        {
                scanf("%s %s %d", __[i].s1, __[i].s2, &__[i].grades);
                if (__[a].grades < __[i].grades)
                        a = i;
                if (__[b].grades > __[i].grades)
                        b = i;
        }

        printf("%s %s\n%s %s", __[a].s1, __[a].s2, __[b].s1, __[b].s2);

        return 0;
}

1005

題解
爆搜出奇蹟

代碼

#include <bits/stdc++.h>

using namespace std;

int k, vis[11000], a[110];

void dfs(int x)
{
        if (x == 2)
        {
                vis[1] = 0;
                return ;
        }
        if (x & 1)
                vis[(3*x+1)/2] = 0, dfs((3*x+1)/2);
        else
                vis[x/2] = 0, dfs(x/2);
}

int main()
{
        scanf("%d", &k);
        for (int i = 1; i <= k; i++)
                scanf("%d", a+i), vis[a[i]] = 1;
        for (int i = 1; i <= k; i++)
                if (vis[a[i]]) dfs(a[i]);
        vector<int> vec;
        for (int i = 100; i >= 1; i--)
                if (vis[i])
                        vec.push_back(i);
        for (int i = 0; i < vec.size(); i++)
                printf("%d%c", vec[i], i == vec.size()-1 ? '\n' : ' ');

        return 0;
}

1006

代碼

#include <bits/stdc++.h>


int main()
{
        int n;
        scanf("%d", &n);
        int a3 = n % 10;
        n /= 10;
        int a2 = n%10;
        n /= 10;
        while (n--)
                putchar('B');
        while (a2--)
                putchar('S');
        for (int i = 1; i <= a3; i++)
                printf("%d", i);

        return 0;
}

1007

題解
利用6倍素數篩隨便取的名字

代碼

#include <bits/stdc++.h>

bool is_prime(int x)
{
        int len = sqrt(x);
        for (int i = 5; i <= len; i += 6)
                if (x % i == 0 || x % (i+2) == 0)
                        return 0;
        return 1;
}

int main()
{
        int n;
        scanf("%d", &n);
        int ans = n >= 5 ? 1 : 0;
        for (int i = 5; i <= n-2; i += 6)
                if (is_prime(i) && is_prime(i+2))
                        ans++;
        printf("%d", ans);

        return 0;
}

1008

題解
m只大於等於零,沒給m的最大值爲多少,就當它不會爆int

代碼

#include <bits/stdc++.h>

int main()
{
        int n, m, a[110];
        scanf("%d%d", &n, &m);
        for (int i = 0; i < n; i++)
                scanf("%d", a+i);
        m = n-m;
        while (m <= 0)
                m += n;
        for (int i = 0; i < n; i++)
                printf("%d%c", a[(i+m)%n], i == n-1 ? '\n' : ' ');

        return 0;
}

1009

代碼

#include <bits/stdc++.h>

using namespace std;

vector<string> s;

int main()
{
        int cnt = 0;
        string t;
        while (cin >> t)
                s.push_back(t);
        for (int i = s.size()-1; i >= 0; i--)
        {
                cout << s[i];
                if (i) putchar(' ');
                else putchar('\n');
        }

        return 0;
}

1010

代碼

#include <bits/stdc++.h>

int main()
{
        int t1, t2;
        scanf("%d%d", &t1, &t2);
        if (!t2)
                printf("0 0");
        else
        {
                printf("%d %d", t1*t2, t2-1);
                while (scanf("%d%d", &t1, &t2) != EOF)
                        if (t2) printf(" %d %d",t1*t2, t2-1);
        }
        return 0;
}

1011

代碼

#include <bits/stdc++.h>
#define LL long long

int t;
LL a, b, c;

int main()
{
        scanf("%d", &t);
        for (int i = 1; i <= t; i++)
        {
                printf("Case #%d: ", i);
                scanf("%lld%lld%lld", &a, &b, &c);
                printf("%s\n", a+b > c ? "true" : "false");
        }

        return 0;
}


1012

代碼

#include <bits/stdc++.h>

using namespace std;

int n, a1, a1_, a2, a2_, a3, a4, a4_, a5, flag = 1, t;

int main()
{
        scanf("%d", &n);
        while (n--)
        {
                scanf("%d", &t);
                if (t % 10 == 0)
                        a1 += t, a1_++;
                if (t % 5 == 1)
                {
                        a2 += flag * t;
                        flag = -flag;
                        a2_++;
                }
                if (t % 5 == 2)
                        a3++;
                if (t % 5 == 3)
                        a4 += t, a4_++;
                if (t % 5 == 4)
                        a5 = max(a5, t);
        }
        if (a1_)
                printf("%d ", a1);
        else
                printf("N ");
        if (a2_)
                printf("%d ", a2);
        else
                printf("N ");
        if (a3)
                printf("%d ", a3);
        else
                printf("N ");
        if (a4_)
                printf("%.1f ", a4*1.0/a4_);
        else
                printf("N ");
        if (a5)
                printf("%d", a5);
        else
                printf("N");

        return 0;
}

1013

題解
歐拉篩,注意範圍

代碼

#include <bits/stdc++.h>

using namespace std;

const int maxn = 104729;

int m, n, a[maxn], cnt;
bool flag[maxn];

int primer() {
        flag[1] = 1;
        for (int i = 2; i <= maxn; i++) {
                if (!flag[i])
                        a[++cnt] = i;
                for (int j = 1; j <= cnt && i*a[j] <= maxn; j++) {
                        flag[i*a[j]] = 1;
                        if (i % a[j] == 0)
                                break;
                }
        }
}

int main()
{
        scanf("%d%d", &m, &n);
        primer();
        for (int i = m; i <= n; i++) {
                printf("%d%c", a[i], (i-m+1) % 10 == 0 || i == n ? '\n': ' ');
        }

        return 0;
}

1014

代碼

#include <bits/stdc++.h>

using namespace std;

char s1[66], s2[66], s3[66], s4[66];
char flag[][10] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
int t1, t2, t3, t4;

int main()
{
        scanf("%s %s %s %s", s1+1, s2+1, s3+1, s4+1);
        int len1 = strlen(s1+1);
        int len2 = strlen(s2+1);
        int len3 = strlen(s3+1);
        int len4 = strlen(s4+1);
        for (int i = 1; i <= min(len1, len2); i++) {
                if (t1 && s1[i] == s2[i] &&((s1[i] >= 'A' && s1[i] <= 'N') || isdigit(s1[i]))) {
                        t2 = i;
                        break;
                }
                if (s1[i] == s2[i] && (s1[i] >= 'A' && s1[i] <= 'G') && !t1)
                        t1 = i;
        }

        for (int i = 1; i <= min(len3, len4) && !t3; i++)
                if (s3[i] == s4[i] && isalpha(s3[i]))
                        t3 = i;
        printf("%s %02d:%02d", flag[s1[t1]-'A'], isdigit(s1[t2])?s1[t2]-'0':s1[t2]-'A'+10, t3-1);

        return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章