3-1
3个整数数组进行整体排序,根据输入的三个数组的元素,输出排序后的结果(从大到小)
输入格式:
第1个数组的长度
第1个数组的各个元素
第2个数组的长度
第2个数组的各个元素
第3个数组的长度
第3个数组的各个元素
输出格式:
所有数组的整体排序
输入样例:
在这里给出一组输入。例如:
3
79 80 61
3
88 66 77
2
23 90
输出样例:
在这里给出相应的输出。例如:
90 88 80 79 77 66 61 23
答案:
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String []args)
{
Scanner s=new Scanner(System.in);
int a=s.nextInt();
int i;
int []arr1=new int [a];
for(i=0;i<a;i++)
{
arr1[i]=s.nextInt();
}
int b=s.nextInt();
int []arr2=new int [b];
for(i=0;i<b;i++)
{
arr2[i]=s.nextInt();
}
int c=s.nextInt();
int []arr3=new int [c];
for(i=0;i<c;i++)
{
arr3[i]=s.nextInt();
}
int [] ee = new int[a + b + c];
System.arraycopy(arr1, 0, ee, 0, a);
System.arraycopy(arr2, 0, ee, a, b);
System.arraycopy(arr3, 0, ee, a + b, c);
Arrays.sort(ee);
System.out.print(ee[ee.length-1]);
for(i=ee.length-2;i>=0;i--)
{
System.out.print(" " + ee[i]);
}
s.close();
}
}
3-2两队PK
A、B两队进行比赛,每队各有多名队员及其分数(分数不重复),使用A、B队所有队员得分的TOP 3来判断两队输赢,在TOP 3中拥有更多人数的队获胜。写程序实现该过程。
输入格式:
A队人数
A队每人得分
B队人数
B队每人得分
输出格式:
前三甲分数
赢的队
输入样例:
5
22 33 44 55 11
4
12 32 42 52
输出样例:
55 52 44
A
答案:
import java.lang.*;
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = 0;
int aNum = scan.nextInt();
Integer[] arraysA = new Integer[aNum];
for(int i = 0; i < aNum; ++i) {
arraysA[i] = scan.nextInt();
}
int bNum = scan.nextInt();
Integer[] arraysB = new Integer[bNum];
for(int i = 0; i < bNum; ++i) {
arraysB[i] = scan.nextInt();
}
Comparator<Integer> cmp = new MyComparator();
Arrays.sort(arraysA, cmp);
Arrays.sort(arraysB, cmp);
Integer[] res = new Integer[3];
int aCmp = 0, bCmp = 0;
for (int i = 0; i < 3; i++) {
if (arraysA[aCmp] > arraysB[bCmp]) {
res[i] = arraysA[aCmp++];
} else if (arraysA[aCmp] < arraysB[bCmp]) {
res[i] = arraysB[bCmp++];
} else {
i++;
}
}
for (int i = 0; i < res.length; ++i) {
System.out.print(res[i]);
if (i != res.length - 1)
System.out.print(" ");
}
System.out.println();
if (aCmp > bCmp) {
System.out.print("A");
} else {
System.out.print("B");
}
scan.close();
}
}
class MyComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
}
3-3数组元素的删除
完成数组元素的移动功能:假设数组有n个元素,输入一个数x,把数组的第x个位置的元素删除了,后面的元素依次前进一个位置。
重复若干次这样的删除,得到最后的结果。
输入格式:
第一行包括一个整数n(1<=n<=100),表示数组元素的个数。
第二行输入n个数组元素,均为整数,用空格隔开。
第三行输入一个数k(1<=k<=100),表示要进行k次删除。
接下来k行,每行一个数x,表示要删除第x个元素。
输出格式:
输出经过k次删除后的数组,每两个元素之间用空格隔开。
输入样例:
10
1 2 3 4 5 6 7 8 9 10
4
3
2
4
6
输出样例:
1 4 5 7 8 10
答案:
import java.util.Scanner;//该包用来调用输入方法
import java.lang.Math;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
for(int i=0 ; i<n ; i++){
a[i] = in.nextInt();
}
int m = in.nextInt();
int[] b = new int[m];
for(int i=0 ; i<m ; i++){
b[i] = in.nextInt();
}
int t=0;
for(int j=0 ; j<m ; j++){
for(int i=0 ; i<n-t ; i++){//循环被删数组
if(i+1==b[j]){//寻找应该删除的元素
for(int k=i ; k<n-1 ; k++){
a[k]=a[k+1];//将删除的元素的后面剩余的元素往前移
}
t++;//缩短被删数组长度
}
}
}
for(int i=0 ; i<n-m ; i++){
if(i==n-m-1){
System.out.println(a[i]);
}
else{
System.out.printf("%d " , a[i]);
}
}
}
}
3-4sdut-array1-1 RDMP音乐播放器(II)(一维数组)
注意: 这是在使用数组的情况下完成的。
RDMP音乐播放器将存储5首歌曲,它们的名称将永远是“A”,“B”,“C”,“D”和“E”。RDMP有3个按钮,用户可以按下这些按钮来重新排列播放列表并播放歌曲。
最初,RDMP播放列表是“A, B, C, D, E”。3个控制按钮做以下工作:
按钮1:将播放列表的第一首歌曲移动到播放列表的末尾。例如:“A, B, C, D, E”会变成“B, C, D, E, A”。
按钮2:将播放列表的最后一首歌移动到播放列表的开始。例如,“A, B, C, D, E”会变成“E, A, B, C, D”。
按钮3:交换播放列表的前两首歌。例如,“A, B, C, D, E”会变成“B, A, C, D, E”。
你需要编写一个程序来模拟一个可以按下n次按钮的RD音乐播放器。(n>0)
输入格式:
输入有多行。
首行是数值n,表示后续要按下按钮的次数。
后续有n行。均为1到3之间的数字,代表要采取的行动。
输出格式:
输出最终播放列表的正确顺序。
歌曲名称中间用逗号作分隔。最后一首歌名称之后没有逗号。
输入样例1:
1
1
输出样例1:
B,C,D,E,A
输入样例2:
1
2
输出样例2:
E,A,B,C,D
输入样例3:
1
3
输出样例3:
B,A,C,D,E
输入样例4:
6
1
2
3
3
2
1
输出样例4:
A,B,C,D,E
答案:
import java.io.*;
public class Main{
static BufferedReader ins =new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in = new StreamTokenizer(ins);
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args)throws IOException{
int a=0;
char[] name=new char[] {'A','B','C','D','E'};
in.nextToken();
a= (int) in.nval;
for(int i=0;i<a;i++){
in.nextToken();
int num=(int)in.nval;
if(num==1){
char record=name[0];
for(int j=0;j<4;j++){
name[j]=name[j+1];
}
name[4]=record;
}
if(num==2){
char record=name[4];
for(int j=3;j>=0;j--){
name[j+1]=name[j];
}
name[0]=record;
}
if(num==3){
char temp=name[0];
name[0]=name[1];
name[1]=temp;
}
}
for (int j=0;j<5;j++){
out.print(name[j]);
if(j!=4)
out.print(",");
}
out.close();
}
}
3-5 重复数据问题
在一大堆数据中找出重复的是一件经常要做的事情。现在要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“yes”这三个字母;如果没有,则输出“no”。
输入格式:
程序会读到n个整数的字符串【1<=n<=10000】,以空格分开,这些整数的范围是[1,10000]。
输出格式:
如果这些整数中存在重复的,就输出:
yes
否则,就输出:
no
输入样例:
在这里给出一组输入。例如:
1 2 3 1 4
输出样例:
在这里给出相应的输出。例如:
yes
答案:
import java.util.*;
class Main{
public static void main(String[] args){
int[] array=new int[10000];
int x,flag=0;
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
x=sc.nextInt();
if(array[x]==1){
flag=1;
break;
}
else
array[x]++;
}
if(flag==1){
System.out.println("yes");
}
else
System.out.println("no");
}
}