题目一:二进制求和
思路:定义一个变量c用于存储进位数,初始化为0,如果a和b的长度相等,则从最后一个元素进行遍历,两个字符串的最后一个元素和进位数相加求余为结果中的最后一个字符,然后进制数等于三数相加除以2,所有元素相加完后,判断最后的进位数,如果是1,则加入字符串中,如果不是,则不加;如果字符串长度不相等,则利用上诉方法从后开始加,加到最小字符串长度位置,然后判断最后一个进制数,如果是0,直接把剩余的元素加入字符串中,如果不是,利用上述方法进行相加,所的字符串为结果的倒序,利用StringBulder的求其翻转结果,即为所求。
代码:
public static String addBinary(String a, String b) {
String s1="";
int c=0;
if(a.length()==b.length()) {
for(int i=a.length()-1;i>=0;i--) {
char m;
char n;
m=a.charAt(i);
n=b.charAt(i);
s1+=(m+n+c)%2;
c=((m-'0')+(n-'0')+c)/2;
}
if(c==1) {
s1+='1';
}
}else {
int max=a.length()>=b.length()?a.length():b.length();
int min=a.length()<=b.length()?a.length():b.length();
int p=min-1;
for(int i=max-1;i>=max-min;i--) {
char m;
char n;
if(a.length()>b.length()) {
m=a.charAt(i);
n=b.charAt(p);
}else {
m=a.charAt(p);
n=b.charAt(i);
}
p--;
s1+=((m-'0')+(n-'0')+c)%2;
c=((m-'0')+(n-'0')+c)/2;
}
if(c==0) {
if(a.length()>b.length()) {
for(int j=max-min-1;j>=0;j--) {
s1+=a.charAt(j);
}
}else if(a.length()<b.length()){
for(int j=max-min-1;j>=0;j--) {
s1+=b.charAt(j);
}
}
}else {
if(a.length()>b.length()) {
for(int j=max-min-1;j>=0;j--) {
int k=a.charAt(j);
s1+=((k-'0')+c)%2;
c=((k-'0')+c)/2;
}
}else if(a.length()<b.length()){
for(int j=max-min-1;j>=0;j--) {
int k=b.charAt(j);
s1+=((k-'0')+c)%2;
c=((k-'0')+c)/2;
}
}
if(c==1) {
s1+="1";
}
}
}
StringBuilder sb=new StringBuilder(s1);
String s=new String(sb.reverse());
return s;
}
运行成功截图:
题目二:极大极小游戏
思路:如果数组长度为1,则直接返回该元素,如果不是,令n=n/2,然后创建一个新数组,然后从0开始进行n次,如果下标为偶数该位置填写最小值,如果为奇数,填写最大值,然后返回数组中的第一个元素,接着进行循环,直到n=1,返回新数组中的第一个数。
代码:
public static int minMaxGame(int[] nums) {
int n=nums.length;
int result=-1;
if(n==1) {
result=nums[0];
}else {
n=n/2;
int[] newNums=new int[n];
for(int i=0;i<n;i++) {
if(i%2==0) {
newNums[i]=Math.min(nums[2*i], nums[2*i+1]);
}else {
newNums[i]=Math.max(nums[2*i], nums[2*i+1]);
}
}
result=newNums[0];
while(n!=0) {
n=n/2;
for(int i=0;i<n;i++) {
if(i%2==0) {
newNums[i]=Math.min(newNums[2*i], newNums[2*i+1]);
}else {
newNums[i]=Math.max(newNums[2*i], newNums[2*i+1]);
}
}
result=newNums[0];
}
}
return result;
}
运行成功截图:
题目三:星期计算
思路:首先定义一个变量sum用于存储多少天后,然后让其等于对7求模,如果最后的sum+6=7,输出7,否则,输出(int)(sum+6)%7。
代码:
public class Main {
public static void main(String[] args) {
double sum=20;
for(int i=1;i<22;i++) {
sum*=20;
}
sum=sum%7;
if(6+sum==7) {
System.out.println(7);
}else {
System.out.println((int)(6+sum)%7);
}
}
}
运行成功截图: