P1106 删数问题 找规律

在这里插入图片描述
题目解答:寻找最靠前的峰值最小新整数
找那个拐点,就是删除从开始打破递增的那个数

  • 12345627
    不是删除最大的那个数7!,而是6!,1234562》1234527
  • 那什么规律呢,如果删掉2,1345627;如果删掉3,1245627;如果删掉4,1235627
    其实这个影响数大小的是,最靠前的那几个数,如果前面递增序列中间的数,后面的替补上来肯定大
  • 所以还是找到打破开头递增序列那个数!!,然后删掉

注意:

  • 前导0,char数组变成int就会避免这个
  • 注意删除时最后补个0
using namespace std;
#include <iostream>
#include <cstring>
int main ()
{
    char a[300];
    cin>>a;
    int n,i,v;
    cin>>n;
    //每次删除一个数,删n次
    for(v=0;v<n;v++)
    {
        //依次顺次变大,如果比后面那个数大则是拐点要删除这个
    	for(i=0;i<strlen(a)-1;i++)
    	{
    		if(a[i]>a[i+1])
    		{
    			break;
			}
		}
		//后面依次覆盖前面一个,删除那个拐点
    	for(;i<strlen(a)-1;i++)
    	{
    		a[i]=a[i+1];
		}	
		//结尾改一下
		a[strlen(a)-1]=0;
		//cout<<a<<endl;			
	}
	
	//如果直接cout<<a则有前置0,转换成int
	int ans=0;
    for(i=0;i<strlen(a);i++)
    {
    	ans=ans*10+a[i]-'0';
	}	
	cout<<ans;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值