第一题:
https://www.luogu.com.cn/problem/P1428
思路:
答案是每两个数用空格隔开,不能用println()
AC: System.out.print(sum+" ");
第二题:
https://www.luogu.com.cn/problem/P1427
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数, 以 0 结束, 以空格间隔。
输出格式
一行内倒着输出这一串整数, 以空格间隔。
输入输出样例
输入 #1复制
3 65 23 5 34 1 30 0
输出 #1复制
30 1 34 5 23 65 3
说明/提示
数据规模与约定
对于100% 的数据,保证 0≤ ai≤231−1,数字 个数不超过 100。
思路:
数组长度不一定,又因为个数不超过100,所以将数组长度初始化为100;
以0结束,所以输入时,判断结束条件是输入值为0;
输出时,不是从第100个数开始输出,而是从倒数第一个不为0的数开始输出,所以用sum计一共有多少个不为0的数,并且i是从sum-2开始。
代码:
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arr[] = new int[100];
int sum =0;
for(int i =0;i<100;i++) {
int x = sc.nextInt();
arr[i] = x;
sum++;
if(arr[i]==0) {
break;
}
}
for(int i=sum-2;i>=0;i--) {
System.out.print(arr[i]+" ");
}
}
}
第三题:
https://www.luogu.com.cn/problem/P5727
题目描述
给出一个正整数 n,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。经过验证很大的数字(7×10^11)都可以按照这样的方式比变成 1,所以被称为“冰雹猜想”。例如当 n n 是 20,变化的过程是 20→10→5→16→8→4→2→1。
根据给定的数字,验证这个猜想,并从最后的 1开始,倒序输出整个变化序列。
输入格式
输入一个正整数 n。
输出格式
输出若干个由空格隔开的正整数,表示从最后的 1 开始倒序的变化数列。
输入输出样例
输入 #1复制
20
输出 #1复制
1 2 4 8 16 5 10 20
说明/提示
数据保证,1≤ n≤100。
思路:
判断奇偶数时,第二个if前要记得加else,不然执行完第一个if后会执行第二个,导致a[i]的值是第二个if里面的值;
结束条件:在外面写while(n!=1),而不在里面用if判断
数组a[ ]的空间要开大一点,不然就无法AC
代码:
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n =sc.nextInt();
int a[] = new int[1000];
int sum =1;
a[0]=n;
int i =1;
while(n!=1) {//在外面写while(n!=1),而不在里面用if判断
//for(int i=1;;i++) {
if(n%2!=0) {
n=n*3+1;
a[i] = n;
sum++;
i++;
}
else if(n%2==0) {//要记得加else
n=n/2;
a[i] = n;
sum++;
i++;
}
/*if(n==1) {
break;
}*/
}
for(int j=sum-1;j>=0;j--) {
System.out.print(a[j]+" ");
}
}
}
第四题:
https://www.luogu.com.cn/problem/P5728
题目描述
现有 N N 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 150的自然数)。如果某对学生 < i, j> 的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
输入格式
第一行一个正整数 N。
接下来 N行,每行三个整数,其中第 i 行表示第 i名同学的语文、数学、英语成绩。最先读入的同学编号为 1。
输出格式
输出一个整数,表示“旗鼓相当的对手”的对数。
输入输出样例
输入 #1复制
3 90 90 90 85 95 90 80 100 91
输出 #1复制
2
说明/提示
数据保证,2≤ N≤1000 且每科成绩为不超过 150 的自然数。
思路:
定义二维数组a[][]存放成绩,sum[]存放三科总分;
分别比较第i位同学(从1开始)与i之前每位同学(从0开始)的成绩,符合则加一;
特别注意数组最后一个的下标是N-1,所以i<=N-1,刚开始写i<=N导致数组越界……
代码:
import java.util.Scanner;
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int a[][] = new int[N][3];
int sum[] = new int[N];
int count=0;
for(int i = 0;i<N;i++) {
a[i][0] = sc.nextInt();
a[i][1] = sc.nextInt();
a[i][2] = sc.nextInt();
sum[i]=a[i][0]+a[i][1]+a[i][2];
}
for(int i = 1;i<=N-1;i++) {//N要-1!!!
for(int z=0;z<i;z++) {//从0开始
if(Math.abs(a[i][0]-a[z][0])<=5&&
Math.abs(a[i][1]-a[z][1])<=5&&
Math.abs(a[i][2]-a[z][2])<=5&&
Math.abs(sum[i]-sum[z])<=10) {
count++;
}
}
}
System.out.println(count);
}
}