天天看點

HDU100題 2020-2029

2020:

#include <cstdio>
#include <algorithm>

using namespace std;

bool cmp(int a, int b)
{
    return abs(a) > abs(b);
}
int a[100+7];
int main()
{
    int n;
    while(scanf("%d", &n), n)
    {
        for(int i=0; i<n; i++)
            scanf("%d", &a[i]);
        sort(a, a+n, cmp);
        for(int i=0; i<n-1; i++)
        {
            printf("%d ", a[i]);
        }
        printf("%d\n", a[n-1]);
    }
   

    return 0;
}
           

2021:

/*
貪心思想,對于每個老師優先發面值大的RMB
 */

#include <cstdio>
#include <algorithm>

using namespace std;

int RMB[] = {100, 50, 10, 5, 2, 1};
int a[100+7];

int main()
{
    int n;
    while(scanf("%d", &n), n)
    {
        for(int i=0; i<n; i++)
        {
            scanf("%d", &a[i]);
        }
        int ans = 0;
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<6; j++)
            {
                while(a[i] >= RMB[j])
                {
                    a[i] -= RMB[j];
                    ans ++;
                }
            }
        }
        printf("%d\n", ans);
    }


    return 0;
}
           

2022:

/*
利用數組建立二位矩陣,按行列搜尋。
 */

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int a[1000+7][100+7];
int main()
{
    int n, m;
    while(scanf("%d%d", &m, &n) != EOF)
    {
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
        int ans = 0;
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                if(abs(a[i][j]) > ans)
                    ans = abs(a[i][j]);
            }
        }
        int x, y;
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                if(abs(a[i][j]) == ans)
                {
                     x = i, y = j;
                     goto out;
                }
            }
        }
        out:
        printf("%d %d %d\n", x+1, y+1, a[x][y]);
    }

    return 0;
}
           

2023:

// 先記錄資料,然後逐漸求解
// abcd命名法危害很大,一個不注意就搞混亂了
// 如果不寫注釋千萬少用abcd命名法

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int a[50+7][5+7];   // 成績單
double b[50+7];     // 學生平均成績
double c[5+7];      // 學科平均成績
int main()
{
    int n, m;
    while(scanf("%d %d", &n, &m) != EOF)
    {
        for(int i=0; i<n; i++)
        {
            b[i] = 0;
            for(int j=0; j<m; j++)
            {
                scanf("%d", &a[i][j]);
                b[i] += a[i][j];
            }
            b[i] = 1.0 * b[i] / m;
        }
        memset(c, 0, sizeof(c));
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                c[i] += a[j][i];
            }
            c[i] = 1.0 * c[i] / n;
        }

        for(int i=0; i<n-1; i++)
        {
            printf("%.2lf ", b[i]);
        }
        printf("%.2lf\n", b[n-1]);
        for(int i=0; i<m-1; i++)
        {
            printf("%.2lf ", c[i]);
        }
        printf("%.2lf\n", c[m-1]);

        int cnt = 0;
        bool flag = true;
        for(int i=0; i<n; i++)
        {
            flag = true;
            for(int j=0; j<m; j++)
            {
                if(1.0 * a[i][j] < c[j])
                {
                    // printf("%d %lf Here\n", a[i][j], c[j]);
                    flag = false;
                    break;
                }
            }
            if(flag) cnt++;
            
        }
        printf("%d\n", cnt);
        puts("");
    }



    return 0;
}
           

2024:

// 巨坑,此代碼不要用g++送出,否則準WA
// 用C++送出AC
// 原因可能是g++對一些函數什麼的标準與C++不一樣
// 直覺告訴我是getline()的鍋,原因是我之前在pta上做練習時g++不支援getline


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

using namespace std;

int main()
{  
    ios::sync_with_stdio(false);
    string s;
    int n;
    cin >> n;
    getchar();
    while(n--)
    {
        getline(cin, s);
        int len = s.size();
        bool flag = true;
        if(s[0] != '_' && !(s[0] >= 'a' && s[0] <= 'z' || s[0] >= 'A' && s[0] <= 'Z'))
        {
            flag = false;
        }        
       
        for(int i=1; i<len; i++)
        {
            if(s[i] != '_' && !(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z') && !(s[i] >= '0' && s[i] <= '9'))
            {
                flag = false;
                break;
            }
        }
        if(flag)    cout<<"yes" << endl;
        else        cout << "no" << endl;
        
    }

    return 0;
}
           

2025:

// 找到最大字元所在的位置,然後周遊到這個位置時就輸出(max)
// 并不需要真的插入

#include <iostream>
#include <string>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    string s;
    while(cin >> s)
    {
        int len = s.size();
        char maxs = '\0';
        for(int i=0; i<len; i++)
        {
            if(s[i] > maxs)
                maxs = s[i];
        }
        for(int i=0; i<len; i++)
        {
            cout << s[i];
            if(s[i] == maxs)    cout << "(max)";
        }
        cout << endl;
    }


    return 0;
}
           

2026:

// 每個單詞前都有一個空格,第一個字母單獨處理

#include <cstdio>
#include <cstring>

using namespace std;

char str[100+7];
int main()
{   
    while(gets(str))
    {
        if(str[0] >= 'a' && str[0] <= 'z')
            str[0] -= ('a' - 'A');
        int len = strlen(str);
        for(int i=1; i<len; i++)
        {
            if(str[i-1] == ' ' && (str[i] >= 'a' && str[i] <= 'z'))
                str[i] -= 'a' - 'A';
        }

        printf("%s\n", str);
    }


    return 0;
}
           

2027:

// 掃面統計就行了
#include <cstdio>
#include <cstring>

using namespace std;

char str[100+7];
int main()
{
    int t;
    scanf("%d", &t);
    getchar();
    while(t--)
    {
        gets(str);
        int num[6];
        memset(num, 0, sizeof(num));
        int len = strlen(str);
        for(int i=0; i<len; i++)
        {
            switch(str[i])
            {
                case 'a': num[1]++; break;
                case 'e': num[2]++; break;
                case 'i': num[3]++; break;
                case 'o': num[4]++; break;
                case 'u': num[5]++; break;
            }
        }
        printf("a:%d\n", num[1]);
        printf("e:%d\n", num[2]);
        printf("i:%d\n", num[3]);
        printf("o:%d\n", num[4]);
        printf("u:%d\n", num[5]);
        if(t != 0)
            puts("");

    }


    return 0;
}
           

2028:

// 實作預測到a*b會溢出,但還是因為邏輯不夠清晰WA了幾發
// n個數求最小公倍數是兩兩求,拿之前的最小公倍數與下一個數求最小公倍數
// 求最大公約數是拿之前的最大公約數與下一個數求最大公約數
// 我就拿得到的最大公約數和下一個數求最小公倍數,是以當然會WA了

#include <cstdio>
#include <algorithm>

using namespace std;
typedef long long LL;

int gcd(int a, int b)
{
    return !b ? a : gcd(b, a%b);
}

int main()
{
    int n;
    LL ans = 1;
    int num, tmp;
    tmp = 1;
    while(scanf("%d", &n) != EOF)
    {
        scanf("%d", &num);
        tmp = num;
        ans = num;
        for(int i=1; i<n; i++)
        {
            scanf("%d", &num);
            tmp = gcd(ans, num);
            ans = num/tmp * ans;
        }
        printf("%lld\n", ans);
    }
    



    return 0;
}
           

2029:

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

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while(t--)
    {
        string s;
        cin >> s;
        int len = s.size();
        int i = 0, j = len-1;
        while(i < j)
        {
            if(s[i] != s[j])    // 不能寫 s[i++] != s[j--]
                break;
            i++, j--;
        }
        if(i >= j)
            cout<<"yes"<<endl;
        else
        {
            cout << "no" << endl;
        }
        
        
    }


    return 0;
}