3.16练习题

本文介绍了三个编程问题的解决方案:一是用Java处理不同长度的二进制字符串相加;二是给出一个数组,通过不断取最大值和最小值组合,求解最后的结果;三是计算经过一定天数后的星期几。所有问题都涉及数学逻辑和编程算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目一:二进制求和

思路:定义一个变量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);
		}
	}
}

运行成功截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值