7-9 删数问题 (10 分)(思路加详解)

一:题目

有一个长度为n(n <= 240)的正整数,从中取出k(k < n)个数,使剩余的数保持原来的次序不变,求这个正整数经过删数之后最小是多少。

输入格式:
n和k

输出格式:
一个数字,表示这个正整数经过删数之后的最小值。

输入样例:

178543 4

结尾无空行
输出样例:

13

二:思路

思路:
1.首先贪心的策略是每次最优,那么结果就是最优的
2.那么这道题我们可以每次删除序列中 升序的结尾,重复上述操作k次,这样的话我们就能可以
这个结果的最优解了

解释:因为在一串数中,我们想要其删完某个数后其剩下的值最小,我们总想删除大的数
那么剩下的数肯定要小呀 比如 12345 删除5剩下的数是最小的

3.当然我们也可以删除每次发生降序的时候 就把前一个数删除

三:上码

/**
  思路:1.首先贪心的策略是每次最优,那么结果就是最优的
  		2.那么这道题我们可以每次删除序列中 升序的结尾,重复上述操作k次,这样的话我们就能可以
		 这个结果的最优解了
		 
		 解释:因为在一串数中,我们想要其删完某个数后其剩下的值最小,我们总想删除大的数
		 	  那么剩下的数肯定要小呀 比如 12345  删除5剩下的数是最小的 
		 
		  
		3.当然我们也可以删除每次发生降序的时候 就把前一个数删除 			
**/

//100012 2  1


#include<bits/stdc++.h>
using namespace std;


int main(){
	
	string str;
	int k,flag = 0;
	vector<char>v;
	
	cin >> str >> k;
	
	for(int i = 0;  i < str.size(); i++){
		v.push_back(str[i]);
	} 
	
	while(k--){
		
		int i = 0;
        flag = 0;
		vector<char>:: iterator t = v.begin();//这里主要是为了调用  v.erase()的库函数删除元素
		
		while(i != v.size()-1){//注意这里的减一 因为下方的v[i+1] 否则会出现段错误
			
			if(v[i] > v[i+1]){//如果出现后一个数小于前一个数那么这就是这一趟的递增的终点 
				v.erase(t);
				flag = 1;
				break;
			}
			
			i++;
			t++;
		}
		
		if(flag == 0){//如果是一个递增序列那么的话就要删除最后一个数 
			v.erase(t);
		}		 
		
	} 
	
	int i = 0;
	
    //这么输出是为了防止前置'0'的输出
	for(int i = 0; i < v.size(); i++)  {
		if(v[i] != '0')
			break; 
	}

	int j = i;	
	
	for( ; j < v.size(); j++){
		cout << v[j];
	} 
  
	
}





 

在这里插入图片描述

四:记录失败码

这是第一次做时写的码,测了好多数据,终于测出错误了,然后就退出算法有问题了但还是想记录一下 下方的测试用例可以拿走不谢


/**
 	思路:将输入的数据当成字符串处理并进行排序,输出字符串长度-k个字符 
*/

#include<bits/stdc++.h>
using namespace std;

int main(){
	
	int n, k;
	vector<char>v,v1,v2,v3;
	int count = 0;
	
	cin >> n >> k;;
	
	stringstream st;
	st << n;
	string str = st.str();
		
	for(int i = 0; i < str.size(); i++){
			
		v.push_back(str[i]);
		v2.push_back(str[i]);
	}
	
	sort(v.begin(),v.end());
	
	for(int i = 0; i < v.size() - k; i++){
		v1.push_back(v[i]);
	}
	
	for(int i = 0; i < v2.size(); i++){
		
		
		for(int j = 0; j < v1.size(); j++){
			if(v2[i] == v1[j] && count < v2.size() - k){
				v3.push_back(v2[i]);
				//cout << v2[i]; 
				v1[j] = 'a';//当统计过一次v1容器当中的元素下次就不在输出了99913 2 
				count++;
				break;
			}
		}
		
	}
	
	for(int i = 0; i < v3.size(); i++){
		 int temp = v3[i] - '0'; 
		 if(temp != 0)
		 cout << temp;
	}
		
} 

//测试用例 
//1378541 4

//378541 4


//1378541 6

//11378541 6

//11378541 5

//378541 4

//99913 2

//100012 1//这个测试用例推翻算法 正确结果应是 12 上方代码输出10001
//       错误原因:他存的时候将10001存进去了v1,那么就永远得不到12    



  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: TIA博途软件与S7-1200/1500 PLC应用详解PDF是一本详细介绍TIA博途软件和S7-1200/1500 PLC应用的电子书。TIA博途软件是西门子公司开发的一款用于工业自动化领域的集成开发环境软件,它集成了PLC编程、HMI设计、驱动程序编写等功能,可以实现对工业控制系统的全面开发和管理。 本电子书详细介绍了TIA博途软件的安装与配置、PLC编程语言、HMI界面设计等内容。首先,它介绍了TIA博途软件的安装过程,并指导用户正确配置软件环境,以便能够顺利进行后续工作。 其次,本书详细讲解了S7-1200/1500 PLC的编程语言。这些编程语言包括梯形图、指令列表和结构化文本,读者可以根据实际需要选择适合的编程语言进行工作。通过实例演示和详细的解释,读者可以深入了解PLC编程的要点和技巧。 此外,本书还介绍了HMI界面设计的相关内容。HMI界面是人机交互的重要组成部,本书通过简单易懂的语言和丰富的图例,向读者展示了如何设计醒目而功能强大的HMI界面,以满足用户对工控系统操作体验的需求。 总之,TIA博途软件与S7-1200/1500 PLC应用详解PDF对于使用TIA博途软件和S7-1200/1500 PLC进行工业自动化控制的人员来说是一本宝贵的学习资料。通过学习本书,读者可以全面了解TIA博途软件和S7-1200/1500 PLC的使用方法和应用技巧,提高自己在工业自动化领域的实践能力和解决问题的能力。 ### 回答2: TIATIA博途软件是西门子公司为其S7-1200/1500系列可编程逻辑控制器(PLC)开发的一款工程软件。该软件具有强大的PLC编程和控制功能,可实现工业自动化控制系统的设计、调试和管理。下面将详细介绍TIATIA博途软件与S7-1200/1500PLC的应用。 首先,TIATIA博途软件为工程师提供了友好的可视化编程界面,使得PLC的编程变得简单易懂。它支持多种编程语言,包括梯形图、功能块图和结构化文本等,满足了不同工程需求。此外,TIATIA博途软件还提供了丰富的标准函库,可快速搭建各种控制逻辑和算法。 其次,TIATIA博途软件具有强大的在线调试和监控功能。通过软件的仿真模式,可以在没有实际硬件设备的情况下进行程序调试,节省了设备和材料成本。一旦PLC与实际设备连接,TIATIA博途软件可以实时监控PLC运行状态、观察输入输出信号和变量值,以及记录历史据,便于故障诊断和性能优化。 另外,TIATIA博途软件还提供了丰富的通信接口,支持与其他设备和系统的集成。通过以太网、PROFIBUS和PROFINET等通信协议,TIATIA博途软件可以与其他PLC、上位机、触摸屏和远程监控系统等进行据交换和远程控制,实现系统的全面联网。 总结来说,TIATIA博途软件与S7-1200/1500PLC的应用简化了工业自动化控制系统的设计和调试流程,提高了工程师的编程效率和工作效果。它的强大功能和可靠性使得S7-1200/1500PLC能够广泛应用于各种领域,包括制造业、能源、交通和建筑等。 ### 回答3: 博途软件是西门子(Siemens)公司推出的一套PLC编程和仿真工具,用于开发、配置和管理S7-1200和S7-1500系列PLC。而S7-1200/1500是西门子公司的最新一代可编程逻辑控制器(PLC),具有高性能、高可靠性和开放性的特点。 TIA博途软件与S7-1200/1500PLC的应用详解PDF是一份详细介绍博途软件和S7-1200/1500PLC应用的电子文档。该文档主要包含以下内容: 1. 博途软件的介绍:介绍博途软件的功能和特点,包括编程、仿真、调试、监控和诊断等功能。同时还介绍了博途软件的安装和配置方法。 2. S7-1200/1500PLC的介绍:介绍了S7-1200/1500PLC的硬件特点和技术指标,包括输入输出模块、通信模块、CPU和存储器等组成部。同时还介绍了S7-1200/1500PLC的安装和连接方法。 3. PLC编程:详细介绍了使用博途软件进行PLC编程的方法和技巧,包括基本指令、据类型、据传输和据处理等。同时还介绍了常用的编程语言,如梯形图和结构化文本语言。 4. PLC应用案例:提供了一些实际的PLC应用案例,包括自动化控制、生产线控制、机器人控制和过程控制等。通过这些案例,读者可以了解如何使用博途软件和S7-1200/1500PLC来解决实际的控制问题。 总之,TIA博途软件与S7-1200/1500PLC应用详解PDF是一份全面介绍博途软件和S7-1200/1500PLC的电子文档,对于学习和应用PLC控制技术的工程师和技术人员来说是一份非常有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天向上的菜鸡杰!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值