牛客题解day01

今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
1
2
3
4
1+2*3=7
1*(2+3)=5
1*2*3=6
(1+2)*3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", "*", "(", ")"符号,能够获得的最大值。

输入描述:
一行三个数a,b,c (1 <= a, b, c <= 10)

输出描述:
能够获得的最大值

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		while(scanner.hasNext()) {
			int a=scanner.nextInt();
			int b=scanner.nextInt();
			int c=scanner.nextInt();
			mathThis(a, b, c);
		}
		
	}
	public static void mathThis(int a,int b,int c) {
		int[] result=new int[5];
		result[0]=a+b+c;
		result[1]=a+b*c;
		result[2]=a*(b+c);
		result[3]=a*b*c;
		result[4]=(a+b)*c;
		for(int i=0;i<result.length;i++) {
			for(int j=0;j<result.length-i-1;j++) {
				if((j+1)>=result.length)
					continue;
				if(result[j]>result[j+1]) {
					int temp=0;
					temp=(int) result[j];
					result[j]=result[j+1];
					result[j+1]=temp;
				}
			}
		}
		System.out.println(result[4]);
	}

}

 

### 问题解牛客网上的“小红的01串”问题要求构造一个排列,使得该排列对应的01串满足特定条件。题目中给出的关键条件是: - 输入一个长度为 `n` 的01字符串 `s`。 - 构造一个长度为 `n` 的整数排列 `p`,使得: - 对于每个位置 `i`(从0开始),如果 `s[i] == '1'`,则 `p[i]` 必须小于后面所有未被标记的位置中的最小值。 - 如果 `s[i] == '0'`,则 `p[i]` 必须大于后面所有未被标记的位置中的最小值。 - 最终输出满足条件的排列 `p`,若不存在这样的排列,则输出 `-1`。 根据引用内容[^1],可以得出以下关键点: - **最后一个字符必须为 `'1'`**:因为排列不能缺少最大值,而只有 `'1'` 的位置才能放置当前剩余的最大值。 - **构造策略**:使用贪心思想,遇到 `'1'` 时放入当前最小值,遇到 `'0'` 时放入当前最大值。 --- ### Python 解题方法 以下是基于上述逻辑的 Python 实现方式: ```python def red_01_string(n, s): if s[-1] != '1': print(-1) return result = [0] * n low = 1 high = n for i in range(n): if s[i] == '1': result[i] = low low += 1 else: result[i] = high high -= 1 print(' '.join(map(str, result))) ``` #### 示例运行 输入: ``` n = 5 s = "10101" ``` 输出: ``` 1 5 2 4 3 ``` --- ### 法说明 - 初始化两个指针 `low = 1` `high = n`,分别代表当前可选的最小值最大值。 - 遍历字符串 `s`: - 若当前位置为 `'1'`,将当前最小值填入结果数组,并递增 `low`。 - 若当前位置为 `'0'`,将当前最大值填入结果数组,并递减 `high`。 - 若字符串末尾不是 `'1'`,直接返回 `-1` 表示无法构造合法排列。 --- ### 时间复杂度分析 - **时间复杂度**:`O(n)`,仅需一次遍历即可完成构造。 - **空间复杂度**:`O(n)`,用于存储输出结果。 --- ### 注意事项 - 需要确保输入的字符串长度与 `n` 一致。 - 若字符串中 `'1'` 的数量不足以支撑构造合法排列(例如中间某处无法满足后续 `'0'` 的需求),程序也能自动处理并输出正确结果或 `-1`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值