【编程题目 |100分】堆栈中的剩余数字【2021 H1,H2, 2022 Q1 考试题】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
【堆栈中的剩余数字】
向一个空栈中依次存入正整数, 假设入栈元素 n(1<=n<=2^31-1)按顺序依次为 nx…n4、 n3、n2、 n1, 每当元素入栈时,如果 n1=n2+…+ny(y 的范围[2,x], 1<=x<=1000),则 n1~ny 全部元素出栈,重新入栈新元素 m(m=2*n1)。
如:依次向栈存入 6、 1、 2、 3, 当存入 6、 1、 2 时,栈底至栈顶依次为[6、 1、 2];当存入 3时, 3=2+1, 3、 2、 1 全部出栈,重新入栈元素 6(6=2*3),此时栈中有元素 6;
因为 6=6,所以两个 6 全部出栈,存入 12,最终栈中只剩一个元素 12。
输入描述:
使用单个空格隔开的正整数的字符串,如”5 6 7 8″, 左边的数字先入栈,输入的正整数个数为 x, 1<=x<=1000。
输出描述:
最终栈中存留的元素值,元素值使用空格隔开,如”8 7 6 5″, 栈顶数字在左边。 6 1 2 3
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
5 10 20 50 85 1
输出
1 170
说明
5+10+20+50=85, 输入 85 时, 5、 10、 20、 50、 85 全部出栈,入栈 170,最终依次出栈的数字为 1 和 170。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
6 7 8 13 9
输出
9 13 8 7 6
示例3 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1 2 5 7 9 1 2 2
输出
4 1 9 14 1
代码实现
Golang
package main import "fmt" func main() { slii := []int{1, 48, 24, 12, 6, 1, 2, 3} //slii := []int{5,10, 20, 50, 85, 1} //slii := []int{6,1, 2, 3} //slii := []int{6,1}
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看C++
#include <bits/stdc++.h> using namespace std; void Split(string input, vector<int>& output, char patten) { string one_word; int j = 0; input += patten; for (int i = 0; i < input.size(); i++) { if (input[i] == patten) { one_word = input.substr(j, i - j); if (!one_word.empty()) { output.push_back(stoi(one_word)); } one_word.clear(); j = i + 1; } } }
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法一
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] strings = sc.nextLine().split(" "); List<Integer> list = new ArrayList<>();
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA解法二
import java.util.Scanner; import java.util.Stack; public class Main {
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看Python
if __name__ == "__main__": nums = list(map(int, input().split())) res = []
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JavaScript
let numList = readline().split(" ").map(Number); //let numList = "1 2 5 7 9 1 2 2".split(" ").map(Number);
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看