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+⋯+(AN−Avg)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,Fi(i=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);
}
}