天天看点

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;
}