1.求两组整数的异或集
【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集异或)。
【输入形式】
首先输入第一个组数的数量,然后换行输入第一组整数,以一个空格分隔各个整数;接着换行输入第二组数的数量,然后在新的一行上输入第二组整数,以一个空格分隔。
【输出形式】
按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。
【样例输入】
8
5 1 4 32 8 7 9 -6
5
5 2 87 10 1
【样例输出】
87 32 10 9 8 7 4 2 -6
【样例说明】
第一组整数为5 1 4 32 8 7 9 -6,第二组整数分别为5 2 87 10 1。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5和1),并从大到小顺序排序后结果为87 32 10 9 8 7 4 2 -6。
public static void main(String[] args) {
Scanner shu = new Scanner(System.in);
int a = shu.nextInt();
int []b= new int[a];
for (int i = 0; i < a; i++) {
b[i] = shu.nextInt();
}
int c = shu.nextInt();
int []d = new int[c];
for (int i = 0; i < c; i++) {
d[i] = shu.nextInt();
}
int f[]= new int[b.length+d.length];
int x=0;
for (int i = 0; i < b.length; i++){
f[i]=b[i];
}
for (int i = 0; i < d.length; i++) {
int y=0;
for (int j=0;j<b.length;j++){
if(d[i]!=f[j]){
y++;
}
if(y== b.length){
f[x+ b.length]=d[i];
x++;
}
}
}
int []g=new int[b.length+x];
for(int i=0; i<b.length+x; i++) {
g[i]=f[i];
}
for (int i=0;i<g.length;i++){
for(int j=i+1;j< g.length;j++)
if(g[j]>g[i]){
int temp=g[i];
g[i]=g[j];
g[j]=temp;
}
}
for (int i = 0; i < g.length; i++) {
System.out.print(g[i] + " " );
}
}
大致的思路是通过创建两个数字分别放入输入的整数集,在创建两个数组,一个用于去重复,一个用于排序,最后输出
2.工资计算
【问题描述】输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如表9.1所示),输出每人的姓名和实发工资(实发工资=基本工资+浮动工资-支出)
表9.1 工资表
姓名 | 基本工资 | 浮动工资 | 支出 |
zhao | 240.00 | 400.00 | 75.00 |
qian | 360.00 | 120.00 | 50.00 |
sun | 560.00 | 0.00 | 80.00 |
【输入形式】先输入雇员数n(整型,3<=n<=10),再依次输入每个雇员的姓名(字符串)、基本工资(实型)、浮动工资(实型)和支出(实型)。
【输入样例】(下划线部分表示输入)
3
zhao 240 400 75
qian 360 120 50
sun 560 0 80
【输出样例】
□zhao,Salary is:565.00
□qian,Salary is:430.00
□□sun,Salary is:480.00
其中下划线部分为输入的内容,□表示空格。
【样例说明】输出这n个雇员的姓名(字符串)和实发工资(实型),每个雇员一行, 内容与格式如下:
姓名,Salary is:实发工资
%5s,Salary is:%7.2f
public static void main(String[] args) {
Scanner shuru = new Scanner(System.in);
int a ;
a = shuru.nextInt();
String yg[][] = new String[a][5];
for (int i = 0; i < a; i++){
yg[i][0] = shuru.next();
yg[i][1] = String.valueOf(shuru.nextDouble());
yg[i][2] = String.valueOf(shuru.nextDouble());
yg[i][3] = String.valueOf(shuru.nextDouble());
}
for (int i = 0; i < a; i++){
double b = Double.parseDouble(yg[i][1]) + Double.parseDouble(yg[i][2]) - Double.parseDouble(yg[i][3]);
yg[i][4] = String.format("%.2f", b);
}
for (int i = 0; i < a; i++){
System.out.printf("%5s,Salary is:%7.2f%n", yg[i][0], Double.parseDouble(yg[i][4]));
}
}
通过将数据存放在数组中,取其中的数值计算并输出
3.日期天数转换
【问题描述】编写一个程序,用户输入日期,计算该日期是这一年的第几天。
【输入形式】用户在第一行输入一个日期(年 月 日,中间以空格分割)
【输出形式】程序在下一行输出一个整数
【样例输入】2006 2 21
【样例输出】52
【样例说明】用户以年月日的格式输入,中间以空格分割,程序计算出该天是输入年份的第几天并输出该天数。另外还需要判断这一年是否为闰年。
public static void main(String[] args) {
Scanner shuru = new Scanner(System.in);
int y,m,d;
y = shuru.nextInt();
m = shuru.nextInt();
d= shuru.nextInt();
boolean runnian = runnianjisuan(y);
int tianshu = dijitian(m, d, runnian);//通过写好的静态方法计算
System.out.println(tianshu);
}
public static boolean runnianjisuan(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}//计算是否为闰年
public static int dijitian(int mm, int dd, boolean runnianjisuan) {
int[] yuefen = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (runnianjisuan) {
yuefen[1] = 29;
}
int tianshu = 0;
for (int i = 0; i < mm - 1; i++) {
tianshu += yuefen[i];
}
tianshu += dd;
return tianshu;
}//计算天数并输出
先写好一个静态方法,直接调用就好了,方法包含一个数组里面放入12个数字代表12个月份的天数,通过输入的月份直接调用数组里的数字相加再加上输入的天数就是总天数