hdu刷题入门(1)

前言

今天bigsai陪伴我刷题,我很高兴在他的帮助下过了8道题。虽然这些题都是很基础的题,但是由于自己基础很薄弱,虽然投入了很多时间,但是觉得很值得,也想在他的陪伴下继续坚持和努力下去!

bigpian加油!

hdu2023求平均成绩

题目链接
题目描述:
在这里插入图片描述
分析
初次拿到这个题,完全没有思路,不知道它让我干嘛,觉得很复杂。后来bigsai让我读题十遍,给我分析了一下题目要求,把一个题目拆分成三小部分的小题,分别是:

  • 求n个学生平均分并输出
  • 求m个各科平均分并输出
  • 求n个学生中各科均大于平均分的学生数(之前未理解题意,后来bigsai跟我说相当于未挂科的学生数,挂科分数线为平均分)在具体的处理上,刚开始也没有思路,然后他提示我用booelan类型的参数进行判断,想了很久才理解:假设先全部科目不挂科,然后每一门进行比较,只要有一门挂科,那么该生就为挂科人,所以就将boolean置为false然后break停止跳出判断。如果boolean为true,说明为好学生总数加1.否则不进行操作。

附上ac代码为:

import java.util.Scanner;

public class Average {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()){
    
    
            int n = scan.nextInt();//学生数
            int m = scan.nextInt();//科目数
            double[][] grade = new double[n][m];
            for(int i=0;i<n;i++){
    
    
                for(int j=0;j<m;j++){
    
    
                    grade[i][j] = scan.nextDouble();
                }
            }//
            for(int i=0;i<n;i++){
    
    
               double sum = 0.00f,ava = 0.00f;
                for(int j=0;j<m;j++){
    
    
                   sum += grade[i][j];
                }
                ava = sum/m;
                if(i==n-1){
    
    
                    System.out.println(String.format("%.2f",ava));
                }else System.out.print(String.format("%.2f",ava)+" ");
            }
            double ave []=new double[m];//各科平均分
            for(int j=0;j<m;j++){
    
    
                double sum1=0.00,ava1=0.00;
                for(int i=0;i<n;i++){
    
    
                    sum1 +=grade[i][j];
                }
                ava1 = sum1/n;
                ave[j]=ava1;
                if(j==m-1) {
    
    
                    System.out.println(String.format("%.2f",ava1));
                }else System.out.print(String.format("%.2f",ava1)+" ");
            }
            int count=0;//不挂科的学生总数
            for(int i=0;i<n;i++){
    
    
                boolean jud=true;//假设不挂科
                //对每个学生进行判断
                for(int j=0;j<m;j++) {
    
    
                    if(grade[i][j]<ave[j])
                    {
    
    
                        jud=false;break;
                    }
                    else {
    
    }
                }
                if(jud)count++;
            }
            System.out.println(count);
            System.out.println();
        }
    }
}

hdu2027统计元音

题目链接
题目描述
在这里插入图片描述
在这里插入图片描述
分析
首先我们知道元音字母为a,e,i,o,u。输入一个字符串,首先先对字符串按照编号遍历,如果字符串里面有对应的元音字符就在相应的判断语句里面进行加一。最后输出遍历结果,我在写这道题的时候又犯了一个错误,输出结果最后一例是没有空行的,我没有意识到 ,这个时候bigsai提醒了我,最后运行成功。

附上ac代码为:

import java.util.Scanner;
public class aeiou {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            scan.nextLine();
            for(int i=0;i<n;i++){
    
    
                int num1=0,num2=0,num3=0,num4=0,num5=0;
                String tmp = scan.nextLine();
                for(int j=0;j<tmp.length();j++){
    
    
                    char ch = tmp.charAt(j);
                    if (ch=='a'){
    
    
                        num1++;
                    }else if(ch=='e'){
    
    
                        num2++;
                    }else if(ch=='i'){
    
    
                        num3++;
                    }else if(ch=='o'){
    
    
                        num4++;
                    }else if(ch=='u'){
    
    
                        num5++;
                    }
                }
                System.out.println("a:"+num1);
                System.out.println("e:"+num2);
                System.out.println("i:"+num3);
                System.out.println("o:"+num4);
                System.out.println("u:"+num5);
                if(i!=n-1){
    
    
                System.out.println();}
             }

        }
    }

hud2044一只小蜜蜂…

题目链接
题目描述
在这里插入图片描述

分析
这道题是bigsai敲的,我跟着他的思路走,以下是我的见解:他说可以用斐波那契思路来做,我说也可以从前往后推,他采纳了。所以他采用等效替代的方法来推导,本来开始用int类型,但是始终过不了,他说数值越界了,改成了long就成功了。

ac代码

import java.util.Scanner;
public class hdu2044一只小蜜蜂 {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        for(int i = 0;i<N;i++){
    
    
            int a = scan.nextInt();
            int b = scan.nextInt();
            long p[]=new long[55];
            p[a]=0;p[a+1]=1;p[a+2]=2;
            for(int j=a+3;j<=b;j++)
            {
    
    
                p[j]=p[j-1]+p[j-2];
            }
            long value=p[b]-p[a];
            System.out.println(value);

        }
    }
}

hud2029Palindromes _easy version

题目链接
题目描述
在这里插入图片描述

分析
首先我们要想到的是”回文串“是啥,知道了它的规律后,就应该知道应该拿前面的字符和后面的字符比较,前面的字符长度应该为二分之一。此时采用Boolean类型来做,如果在比较的过程中,有一个false或者多个false,则输出NO。

ac代码

import java.util.Scanner;
public class Huiwenchuan {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        scan.nextLine();
        for(int i=0;i<n;i++){
    
    
            String tmp = scan.nextLine();
            char ch1[]=tmp.toCharArray();
            boolean ishuiwen=true;
            for(int j=0;j<tmp.length()/2;j++) {
    
    
                if(ch1[j]==ch1[tmp.length()-j-1]){
    
    
                          //不操作
                }else
                {
    
    
                    ishuiwen=false;
                    break;
                }
            }
            if(ishuiwen)System.out.println("yes");
            else System.out.println("no");
        }
    }
}

hud2043密码

题目链接
题目描述
在这里插入图片描述

分析
首先输入一个密码,判断它的字符大小是否满足8到16这个范围,然后再筛选字符里面是否包含3个或3个以上的字符类别。

ac代码

import java.util.Scanner;
public class Password {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int M = scan.nextInt();
        scan.nextLine();
        for (int i = 0; i < M; i++) {
    
    
            int a = 0, b = 0, c = 0, d = 0,e=0;
            String str = scan.nextLine();
            if (str.length() <= 16 && str.length() >= 8) {
    
    
                char[] ch = str.toCharArray();
                for (int j = 0; j < str.length(); j++) {
    
    
                    if (ch[j] <= 'Z' && ch[j] >= 'A') {
    
    
                        a = 1;
                    } else if (ch[j] <= 'z' && ch[j] >= 'a') {
    
    
                        b = 1;
                    } else if (ch[j] >= '0' && ch[j] <= '9') {
    
    
                        c = 1;
                    } else if (ch[j] == '~' || ch[j] == '!' || ch[j] == '@' || ch[j] == '#' || ch[j] == '$' || ch[j] == '%' || ch[j] == '^') {
    
    
                        d = 1;
                    }
                }
            }
            if ((a + b + c + d) >= 3) {
    
    
                System.out.println("YES");
            }else System.out.println("NO");
        }
    }
}

hud2040亲和数

题目链接
题目描述
在这里插入图片描述

分析
真约数是除了1和它本身,还有其他的公约数,称为真约数。题目要求给出两个数,如果一个数的公约数之和(不包括其本身)等于另一个数,则互相为亲和数。

ac代码

import java.util.Scanner;
public class Qinyueshu {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        int M = scan.nextInt();
        for(int i =0;i<M;i++){
    
    
            int sum1 = 0,sum2 = 0;
            int a = scan.nextInt();
            int b = scan.nextInt();
            for(int j = 1;j<a;j++){
    
    
                if(a%j==0){
    
    
                    sum1 += j;
                }
            }
            for(int k = 1;k<b;k++){
    
    
                if(b%k==0){
    
    
                    sum2 += k;
                }
            }
            if(sum1==b && sum2==a){
    
    
                System.out.println("YES");
            }else System.out.println("NO");
        }
    }
}

hud2021发工资咯

题目链接
题目描述
在这里插入图片描述

分析
假如一个老师的工资是299元,则先除以100为2,然后再与100相余则剩99,再除以50为1,一次类推,可得到在这6张面值的张数。

ac代码

package ex2;

import java.util.Scanner;
//100 50 10 5 2 1     //step 判断多少个100   299   299/100=2   2个100 num=num%100
//  99/50=1    99%50=49  49/10=4   9  9/5=1   4  4/2=2   0 1/0;
public class Salary {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
    
    
            int n = scan.nextInt();
            scan.nextLine();
            if(n==0){
    
    
                break;
            }
            int[] salary = new int[n];
            for (int i = 0; i < n; i++) {
    
    
                salary[i] = scan.nextInt();
            }

            int sum = 0;
            for (int i = 0; i < n; i++) {
    
    
                sum += salary[i] / 100 + salary[i] % 100 / 50 + salary[i] % 100 % 50 / 10 + salary[i] % 100 % 50 % 10 / 5 + salary[i] % 100 % 50 % 10 % 5 / 2 + salary[i] % 100 % 50 % 10 % 5 % 2 / 1;
            }
                System.out.println(sum);
        }
    }
}

hud2032杨辉三角

题目链接
题目描述
在这里插入图片描述
分析
先找出杨辉三角的规律,在横竖坐标相等的时候为1,在横坐标为0的时候也为1。到了第二行,数的值=上方数值+左上方数值。输出的时候做判断,如果行列坐标相等则直接输出,否则输出+空格。注意:最后要空行。

ac代码

import java.util.Scanner;
public class Yanghui {
    
    
    public static void main(String[] args) {
    
    
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()){
    
    
           int n = scan.nextInt();
           int[][] a = new int[n][n];
           for(int i = 0;i<n;i++){
    
    
               a[i][0] = 1;
               a[i][i] = 1;
           }
           for(int i = 1;i<n;i++){
    
    
               for(int j=1;j<n-1;j++){
    
    
                   a[i][j]=a[i-1][j]+a[i-1][j-1];
               }
           }
           for(int i = 0;i<n;i++){
    
    
               for(int j=0;j<=i;j++){
    
    
                   if(j==i){
    
    
                       System.out.print(a[i][j]);
                   }else System.out.print(a[i][j]+" ");
               }
               System.out.println();
           }
            System.out.println();
        }
    }
}


猜你喜欢

转载自blog.csdn.net/qq_41638508/article/details/105353795