梦想护卫舰 第34期 递增运算【原创】
本帖最后由 元豪 于 2023-5-7 17:02 编辑梦想护卫舰 第34期 递等运算
梦想护卫舰终于继续出发
这时,高山发现,船上的很多人竟然不会递等运算!!!这可不行,所以他来拜托你帮忙教学一下。{:10_256:}
static/image/hrline/1.gif
题目描述
给定一个混合算式,输出递等运算的过程。
先乘除后加减。
举一个例子:
3+10*10-15/3
=3+100-15/3
=3+100-5
=103-5
=98
除法向下取整。
static/image/hrline/1.gif
输入格式
输入 1 行,1 个混合算式。
static/image/hrline/1.gif
输出格式
输出所有的过程。
注意!第一行要输出原算式,前面要输出 1 个空格。
static/image/hrline/1.gif
输入输出样例
输入 #1
3+10*10-15/3
输出 #1
3+10*10-15/3
=3+100-15/3
=3+100-5
=103-5
=98
输入 #2
1+1+5+5+6+9+7
输出 #2
1+1+5+5+6+9+7
=2+5+5+6+9+7
=7+5+6+9+7
=12+6+9+7
=18+9+7
=27+7
=34
输入 #3
10+10*10*10/100
输出 #3
10+10*10*10/100
=10+100*10/100
=10+1000/100
=10+10
=20
static/image/hrline/1.gif
数据范围
对于 100% 的数据,保证算式中数字个数 2 <= N <= 1000 且单个数字 1 <= N_i <= 10^9 。
注:本题原创,链接:https://www.luogu.com.cn/problem/T326736
图一时之快先看答案,你将失去一次锻炼的机会!
static/image/hrline/1.gif
答案与解析
**** Hidden Message *****
听说这里有鱼币可以领:
#include <bits/stdc++.h>
using namespace std;
char s, chr;
__int128 num, imposs = 1145141919810;
long long n, nums, chrs, rn;
void output(__int128 n) {
if (n < 0) {
n = labs(n);
printf("-");
}
if (n == 0) printf("0");
else {
char ans;
int t = 0;
while (n) {
ans[++t] = n % 10 + '0';
n /= 10;
}
for (int i = t; i >= 1; --i) {
printf("%c", ans);
}
}
}
void output() {
printf("=");
int tot = 0, chtot = 0;
for (int i = 1; i <= nums; ++i) {
if (num != imposs) num[++tot] = num;
}
for (int i = 1; i <= chrs; ++i) {
if (chr != 0) chr[++chtot] = chr;
}
chrs = chtot;
nums = tot;
for (int i = 1; i <= nums; ++i) {
output(num);
if (i != nums) {
printf("%c", chr);
}
}
printf("\n");
}
int main() {
scanf("%s", s + 1);
n = strlen(s + 1);
__int128 t = 0;
for (int i = 1; i <= n; ++i) {
if (s >= '0' && s <= '9') {
t = t * 10 + (s - '0');
} else {
num[++nums] = (__int128)t;
chr[++chrs] = s;
t = 0;
}
}
num[++nums] = (__int128)t;
printf(" %s\n", s + 1);
while (nums != 1) {
int pos = 1;
for (int i = 1; i <= chrs; ++i) {
if (chr == '*' || chr == '/') {
pos = i;
break;
}
}
__int128 lv = num, rv = num;
num = imposs;
switch (chr) {
case '+':
num = lv + rv;
break;
case '-':
num = lv - rv;
break;
case '*':
num = lv * rv;
break;
case '/':
num = lv / rv;
break;
default:
exit(1);
}
chr = 0;
output();
}
} @zhangjinxuan @高山 @sfqxx @ExiaGN001 {:10_254:}{:10_254:} {:10_266:} zhangjinxuan 发表于 2023-4-1 12:44
{:10_245:} 本帖最后由 zhangjinxuan 于 2023-4-1 12:51 编辑
我们要向他人虚心请教,做一个不耻下问的好学生,这样我们的水平才会有所提高{:10_256:}{:10_256:}{:10_256:}
说亮话,我不会,我真搞不懂哪里出了问题{:10_250:}
#include <bits/stdc++.h>
import sys
s = str() #整个表达式
char = [] #运算符
num = [] #数字
n = int() #字符串的长度
nums = int(-1) #数字的个数
chrs = int(-1) #运算符的个数
impossible_number = 11451419198105201314100863141592699897894123784923 #当一个数字消除了的时候,把他设为这个数字,后面再做处理
def output() -> None: #输出
global num, nums, char, chrs
print('=', end = '')
tot = chtot = -1
for i in range(0, nums + 1): #去掉消除了的数字
if num != impossible_number:
tot += 1
num = num
for i in range(0, chrs + 1): #运算符同理
if char != '.':
chtot += 1
char = char
nums = tot
chrs = chtot
for i in range(0, nums + 1): #输出
print(num, end = '')
if i != nums:
print(char, end = '')
print()
def main() -> int: #主函数
global nums, chrs, num, char, impossible_number
s = input().strip()
n = len(s)
t = int()
for i in range(n):
if s.isdigit(): #获取数字
t = t * 10 + int(s)
else: #运算符,说明数字结束
nums += 1
chrs += 1
num +=
char += ]
t = 0
nums += 1 #还有一个数字没有添加
num +=
print(" %s" % s)
while nums != 0: #还有数字
pos = int(0)
for i in range(0, chrs + 1): #获取第一个乘,除号
if char == '*' or char == '/':
pos = i
break
lv = num #获取运算符两边数字
rv = num
num = impossible_number
if char == '+': #运算
num = lv + rv
elif char == '-':
num = lv - rv
elif char == '*':
num = lv * rv
elif char == '/':
num = lv // rv
else:
pass
char = '.' #要消除的运算符标记
output()
tmp = eval(s.replace('/', '//')) #一个验证,看看结果对不对
if tmp == num:
return 0
else:
return 1
return 0
if __name__ == '__main__':
sys.exit(main()) zhangjinxuan 发表于 2023-4-1 12:46
我们要向他人虚心请教,做一个不耻下问的好学生,这样我们的水平才会有所提高{:10_256 ...
我估计没有问题 , 只是效率差点意思{:10_256:} 不好意思,我是WA,不是Tle:
https://www.luogu.com.cn/record/106596730 zhangjinxuan 发表于 2023-4-1 12:51
不好意思,我是WA,不是Tle:
https://www.luogu.com.cn/record/106596730
啊这 , 不会是标程有问题吧{:10_245:} 元豪 发表于 2023-4-1 12:54
啊这 , 不会是标程有问题吧
20%是标程问题,30% 是环境差异问题,50%是我的问题{:10_250:} zhangjinxuan 发表于 2023-4-1 12:57
20%是标程问题,30% 是环境差异问题,50%是我的问题
{:10_256:} 是时候拿出我的祖传找茬{:10_277:},啊呸{:10_306:},hack技术了{:10_279:} zhangjinxuan 发表于 2023-4-1 12:59
是时候拿出我的祖传找茬,啊呸,hack技术了
{:10_334:} 本帖最后由 歌者文明清理员 于 2023-4-1 15:04 编辑
这是真的难
yunsuan = eval可以省事 叫你用梦想护卫舰的背景呢 高山 发表于 2023-4-1 22:29
叫你用梦想护卫舰的背景呢
啊对 ! {:10_257:}我改改啊 题目错了,是递等不是递增 歌者文明清理员 发表于 2023-4-2 11:03
题目错了,是递等不是递增
啊这......谢谢提醒{:10_277:} 元豪 发表于 2023-4-2 11:21
啊这......谢谢提醒
主题的题目也没改
页:
[1]
2