7-1 杨辉三角

求杨辉三角的前n行数据。

输入格式:

输入n(n<10)值。

输出格式:

输出杨辉三角的前n行数据,每个数据占4列。

输入样例:

5

输出样例:

   1
   1   1
   1   2   1
   1   3   3   1
   1   4   6   4   1

java代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n = scanner.nextInt();
        //杨辉三角形的行数
        int[][] a = new int[9][9];
        for(int i=0;i<n;i++) {
            a[i][0]=1;
            a[i][i]=1;
        }
         for (int i = 2; i < n; i++) {
             for (int j = 1; j < i; j++) {
                 a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
             }
         }
         for(int i=0;i<n;i++) {
             for(int j=0;j<=i;j++) {
                 System.out.print("   "+a[i][j]);
             }
             System.out.println();
         }      
    }
}

7-2 splay排序(5)

小明在写某道C语言题目时发现自己因为排序算法的问题,导致提交的代码运行超时。小明之前运用的是冒泡算法,在学会splay之后,他准备通过将输入的数字依次插入splay来进行排序,缩短排序时间,同时还可以知道每插入一个数之后,splay中有多少个小于该数字的数。

输入格式:

第一行为一个正整数n,从第二行开始为n个整数,两整数之间用空格分开。1≤n≤100000。

输出格式:

输出n+1行。
对于前n行,第i行的包含两个数字:第i个输入的数字与插入时小于它的数字个数。
在第n+1行将给定n个数从小到大输出,数之间用空格隔开,行末换行且无空格。

输入样例:

在这里给出一组输入。例如:

10
89 2 21 534 12 423 542 35 11 21

输出样例:

在这里给出相应的输出。例如:

89 0
2 0
21 1
534 3
12 1
423 4
542 6
35 3
11 1
21 3
2 11 12 21 21 35 89 423 534 542 

java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main{

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(buf.readLine());
        String []k=buf.readLine().split(" ");
        int []a=new int[n];
        for(int i=0;i<n;i++) {
            a[i]=Integer.parseInt(k[i]);
            int count=0;
            int max=a[i];
            for(int j=0;j<i;j++) {
                if (a[j]<max) {
                    count++;
                }
            }
            System.out.println(a[i]+" "+count);
        }
        Arrays.sort(a);
        for(int i=0;i<n;i++) {
            if (i==0) {
                System.out.print(a[i]);
            }
            else {
                System.out.print(" "+a[i]);
            }
        }
        System.out.println();
    }
}

7-11 人民币兑换

1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。

输入格式:

输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。

输出格式:

显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。

注意:如果全部方案不到n种,就顺序输出全部可能的方案。

输入样例:

5

输出样例:

1 46 53  
2 42 56  
3 38 59  
4 34 62  
5 30 65

java代码

import java.util.Scanner;
public class Main {
 
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n = scanner.nextInt();
        //将150分配到5和2和1里,且5+2+1分的数量等于100
        for(int i = 1; i<=n;i++) {//输出5分的值
            for(int j=1;j<=100-i;j++) {
                if (i*5+j*2+(100-i-j)==150) {
                    System.out.println(i+" "+j+" "+(100-i-j));
                }
            }        
        }    
    }
}

7-12 考试座位号

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式:

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例:

4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出样例:

3310120150912002 2
3310120150912119 1

java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        int n=Integer.parseInt(buf.readLine());
        String[][]a=new String[n][3];
        //数据的存入
        for(int i=0;i<n;i++) {           
                String[] str1=buf.readLine().split(" ");
                a[i][0] =str1[0];
                a[i][1] =str1[1];
                a[i][2] =str1[2]; 
        }     
        int m =Integer.parseInt(buf.readLine());
        //输出测试数据,即试机座位号
            String []str3=buf.readLine().split(" ");
           for(int i=0;i<m;i++) {
            for(int j=i;j<n;j++) {
                if (str3[i].equals(a[j][1])) {
                    System.out.println(a[j][0]+" "+a[j][2]);
                    break;
                }
            }
        }  
    }
}

7-13 求集合数据的均方差

设计函数求 N 个给定整数的均方差。若将 N 个数 A[ ] 的平均值记为 Avg,则均方差计算公式为:[(A1−Avg)2+(A2−Avg)2+⋯+(ANAvg)2]/N

输入格式:

输入首先在第一行给出一个正整数 N(≤104),随后一行给出 N 个正整数。所有数字都不超过 1000,同行数字以空格分隔。

输出格式:

输出这N个数的均方差,要求固定精度输出小数点后5位。

输入样例 1:

10
6 3 7 1 4 8 2 9 11 5

输出样例 1:

3.03974

输入样例 2:

1
2

输出样例 2:

0.00000

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main { 
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));    
        int N=Integer.parseInt(buf.readLine());
        double sum=0;
        int []num=new int[N];
        String []k=buf.readLine().split(" ");
        for(int i=0;i<N;i++) {
            num[i]=Integer.parseInt(k[i]);
            sum+=num[i];
        }
        
        double avg=sum/N;
        
        double sum2=0;
        for(int i=0;i<N;i++) {
            sum2=(num[i]-avg)*(num[i]-avg)+sum2;
        }
        System.out.println(String.format("%.5f", Math.sqrt(sum2/N)));
    }
}

7-14 点赞

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1≤K≤10,Fii=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3

java代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
 
    static int[] tag = new int[1001];
     
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        for(int i = 0; i < n; i++) {
            String[] k = in.readLine().split(" ");//根据空格将值分开分别放到数组k中
            //注意:要从下标1开始
            for(int j = 1; j < k.length; j++) {
                int temp = Integer.parseInt(k[j]);//将字符串转化为数值
                //把出现的数值作为数组的下标,顺便统计次数
                tag[temp]++;
            }
        }
        
        //假设第一个值出现的次数最多,即数值最大
        int index = 0;
        int max = tag[0];
        for(int i = 1; i <= 1000; i++) {
            if(max <= tag[i]) {
                max = tag[i];
                index = i;
            }
        }
        System.out.printf("%d %d\n", index, max);
    }
}

7-19 三足鼎立

当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈“三足鼎立”之势,这种状态是最稳定的。

现已知本国的实力值,又给出 n 个其他国家的实力值。我们需要从这 n 个国家中找 2 个结盟,以成三足鼎立。有多少种选择呢?

输入格式:

输入首先在第一行给出 2 个正整数 n(2≤n≤105)和 P(≤109),分别为其他国家的个数、以及本国的实力值。随后一行给出 n 个正整数,表示n 个其他国家的实力值。每个数值不超过 109,数字间以空格分隔。

输出格式:

在一行中输出本国结盟选择的个数。

输入样例:

7 30
42 16 2 51 92 27 35

输出样例:

9

样例解释:

能联合的另外 2 个国家的 9 种选择分别为:

{16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。

java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main { 
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str1=in.readLine();//输入的国家数和自己的国力
        String[] num =str1.split(" ");
        int n = Integer.parseInt(num[0]);//国家数
        int m = Integer.parseInt(num[1]);//本国国力
        //进入循环,输入其他国家的国力
        String []k=in.readLine().split(" ");
        int []res= new int[n];
        for(int i=0;i<n;i++) {
            int np=Integer.parseInt(k[i]);
            res[i]=np;//将国力放进res数组
        }
        //输入完成,进行比较
        int count=0;
        for(int i=0;i<n;i++) {
            for(int j=i+1;j<n;j++) {
                if (res[i]+res[j]>m&&i!=j&&res[i]+m>res[j]&&res[j]+m>res[i]) {                    
                        count++;
                }
            }
        }
        System.out.println(count);
    }
}
最后修改:2022 年 09 月 24 日
如果觉得我的文章对你有用,请随意赞赏