其他分享
首页 > 其他分享> > CF313A Ilya and Bank Account 题解

CF313A Ilya and Bank Account 题解

作者:互联网

Update

Content

有一个人的银行账户里有 \(n\) 元钱,他可以删去倒数第二位获最后一位数字来使得账户里面的钱最大。请求出他的银行账户余额的最大值。

数据范围:\(10\leqslant |n|\leqslant 10^9\)。

Solution

这道题目很简单,枚举倒数第二位和最后一位数字删去之后的账户余额,然后比较哪个更大就好。当然,如果是正数的话不需要删,肯定是越删余额越少的,毕竟谁都不希望把自己原来就有的钱变少。

具体我们用一个字符串实现,读入,如果第一个字符不是负号,那么就直接输出结束。否则,将负号以外的数一一枚举删除,然后比较答案更新。最后取最小值带负号输出,相当于最大值。不过这里要注意的一点就是,\(-0\) 是不合法的,所以,当答案是 \(0\) 时,我们不需要输出前面的负号。

Code

说明一下:

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

char a[17];

int main() {
	scanf("%s", a);
	if(isdigit(a[0]))	return printf("%s", a), 0;
	else {
		int len = strlen(a), ans = 0x3f3f3f3f;
		for(int i = len - 2; i < len; ++i) {
			int s = 0;
			for(int j = 1; j < len; ++j)
				if(j != i)	s = s * 10 + a[j] - '0';
//			printf("delete %d: %d\n", i, s);
			ans = min(ans, s); 
		}
		if(ans)	printf("-");
		return printf("%d", ans), 0;
	}
}

标签:Account,int,题解,printf,len,CF313A,ans,include,负号
来源: https://www.cnblogs.com/Eason-AC/p/15717079.html