30分求助,思路应该没问题
查看原帖
30分求助,思路应该没问题
574884
Kasumi_Hakurei楼主2023/8/16 10:00
#include <iostream>
#include <string>
#include <cmath>
using namespace std;

int main()
{
	int s[300] = {0}, n;
	string str;
	cin >> str >> n;
	for (int i = str.length()-1; i >= 0;--i)
		s[i] = str[i] - '0';				//字符串高精度
	
	int s2[300] = {0}, last = 0, now = 0, j = 1;
	s2[0] = s[0];
	for (int i = 1;i < str.length() && n > 0;++i)
	{
		if(s2[j - 1] > s[i])
		{
			s2[j - 1] = s[i];
			--n;		//删掉两个数中前面比后面大的
		}
		else
		{
			s2[j] = s[i]; //如果前面比后面小就正常入栈
			++j;
		}
	}
	
	
	
	for (int i = 0;i < j;++i)
		cout << s2[i];
	
	return 0;
}

我的思路是 比较输入的高精度数字(存在s里面)的每两位,如果前一位比后一位大就把前一位删掉,可用删数次数(n)-1,小的那个数进入栈s2,然后再把s2和s循环到的那一位比较,如果s2前面比s1当前位大再删,一直这样直到删的次数耗完为止,万分感谢

2023/8/16 10:00
加载中...