[编程题]复数乘法
题目描述:
输入两个表示复数的字符串,输出它们相乘的结果的字符串
复数字符串用a+bi表示(a, b 为整数, i为虚数单位,i² =1)
输入描述:
两个表示复数的字符串
输出描述:
两个数相乘的结果的字符串
输入例子:
1+2i
2+1i
输出例子:
0+5i
解题思路:
先将输入的两个复数进行拆分,并提取出实部和虚部,随后进行运算即可
import java.util.Scanner;
public class complexNumber {
public static int stringtoInt(String s){
int num = 0;
int flag = 1;
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) == '-')
flag = -1;
else if (s.charAt(i) >= '0' && s.charAt(i) <= '9')
num = num * 10 + (s.charAt(i) - '0');
}
return num * flag;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1= sc.nextLine();
String s2 = sc.nextLine();
int a1 =stringtoInt(s1.substring(0,s1.indexOf('+'))) ;
int a2 =stringtoInt(s1.substring(s1.indexOf('+')+1)) ;
int b1 = stringtoInt(s2.substring(0,s2.indexOf('+')));
int b2 = stringtoInt(s2.substring(s2.indexOf('+')+1));
int f= a1*b1-a2*b2;
int s= a1*b2+a2*b1;
System.out.println(f + "+" + s + "i");
}
}
[编程题]一年中的第几天
题目描述:
输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天)
输入描述:
一个"YYYY-MM-dd"格式的表示日期的字符串
输出描述:
该天是当年的第几天
输入例子:
2019-01-09
输出例子:
9
解题思路:
首先将字符串进行拆分,先根据年份确定平年还是闰年,随后进行根据月份算出已经过去的天数,再加上几号即可
import java.util.Scanner;
public class days {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String date = sc.nextLine();
String[] d = date.split(String.valueOf('-'));
int year = Integer.parseInt(d[0]);
int month = Integer.parseInt(d[1]);
int day = Integer.parseInt(d[2]);
int count = 0;
int[] pingDays = new int[]{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
int[] runDays = new int[]{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
if (((year % 4 == 0 )&&(year % 100 != 0))||(year % 400 ==0)){
count = runDays[month - 1]+day;
}else {
count = pingDays[month - 1] + day;
}
System.out.println(count);
}
}
[编程题]k个一组翻转链表
题目描述:
给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
输入描述:
第一行:依次输入链表中的各个元素,以"#"结束
第二行:每组数量k
输出描述:
处理后的链表中的各个元素,以"->"连接
输入例子:
1 2 3 4 5 #
2
输出例子:
2->1->4->3->5
解题思路:
首先将输入的字符串变成只有内容的数组,然后循环调用编写的翻转函数对数组进行翻转,如果长度不足则取消翻转
import java.util.Scanner;
public class reverse {
public static void reveral(String[] arr,int start,int end){
while (start<end) {
String tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String arr = sc.nextLine();
String arrs = arr.substring(0,arr.length()-1);
String[] list = arrs.split(" ");
int size = sc.nextInt();
int start = 0;
while (start + size - 1 < list.length){
reveral(list,start,start+size-1);
start = start +size;
}
for (int i = 0;i<list.length-1;i++){
System.out.print(list[i]+"->");
}
System.out.println(list[list.length-1]);
}
}