zoukankan      html  css  js  c++  java
  • 寻求最大数(二)

    寻找最大数(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
    描述

    给你一个数字n(可能有前缀0)。

    要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大。

    输入
    有多组测试数据。
    对于每组数据,输入一个n(0<=n<=10^100).
    输出
    输出栈操作后的结果。
    样例输入
    789
    75948
    样例输出
    987
    98457
    本质上是栈贪心
    思路:str保存初始数字,res为结果数组并结合top模拟栈操作,在s<strlen(str)时,从s(初始为0)开始先扫描str中还未入栈的数字,
    获得最大数字对应的下标index,同时更新maxchar,然后将res数组中不小于maxchar的依次输出,接着将str扫描的起始点s到index(不包括index)中元素入res,随即在index<strlen(str)时,输出index对应的数字,并更新s为index+1,最后,在str的数字已全都入栈而栈不为空时,元素出栈直至为空
    #include <stdio.h>
    #include <string.h>
    
    char str[102],res[102];
    int top;
    
    void MaxNum(){
    	int s,len,index,i;
    	char maxchar;
    	s=0,len=strlen(str);
    	while(s<len){
    		maxchar='0';
    		for(i=s;i<len;i++)
    			if(str[i]>maxchar){
    				maxchar=str[i];
    				index=i;
    			}
    		if(maxchar=='0') index=len; //还未入栈的数字全为0
    		for(i=top;i>=0;i--){
    			if(res[i]>=maxchar) putchar(res[i]);//输出不小于当前最大数字的数字 
    			else break;
    		}
    		top=i;//更新top 
    		for(i=s;i<index;i++)
    			res[++top]=str[i];
    		if(index!=len) putchar(str[index]);//输出当前最大数字 
    		s=index+1;
    	}
    	for(i=top;i>=0;i--)
    		putchar(res[i]);
    	puts("");
    }
    
    int main(){
    	while(~scanf("%s",str)){
    		top=-1;
    		MaxNum();
    	}
    	return 0;
    }
    

    参照: `````````````````````````````````````````````````TC_赵坤垚``````````````````````````````````````````````````````

     
  • 相关阅读:
    FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具
    如何去设计一个自适应的网页设计或HTMl5
    教育行业SaaS选型 需要注意的三点问题
    SaaS系列介绍之十五: SaaS知识重用
    SaaS系列介绍之十四: SaaS软件开发分析
    SaaS系列介绍之十三: SaaS系统体系架构
    SaaS系列介绍之十二: SaaS产品的研发模式
    个人总结
    用例图设计
    第二次结对作业
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/6533006.html
Copyright © 2011-2022 走看看