寻找最大数

描述

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538,m=10时,则新的最大数是9888

 

输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2
92081346718538 10
1008908 5
样例输出
9888
98

//太坑了,刚开始完全理解错误,没仔细读题,,未看见(按原次序组成的新数最大

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
	int x,n,b,i,j;
	char a[1000];
	cin>>n;
	while(n--)
	{
		scanf("%s %d",a,&b);
		x=strlen(a);
		int t=x-b;
		int m=0;
		int max;
		while(t--)//需要挑出x-b位数,第一次从开始到b挑出最大的数并记录下最大数的位置,第二次从上一次最大数位置的下一位开始到b+1位挑出最大数。。依次类推直到t==0时
		{
			max=0;
			for(i=m;i<=b;i++)
			{
				if(a[i]-'0'>max)
				{
					max=a[i]-'0';
					m=i+1;
				}
			}
			cout<<max;
			b++;
		}
		cout<<endl;
	}
	return 0;
}



### 微机原理中寻找最大数的算法实现 在微机原理课程中,通常会涉及如何使用汇编语言编写程序来完成一些基本操作,比如寻找一组数据中的最大值。以下是基于汇编语言的一个典型示例,用于展示如何在一个数组中找到最大数值。 #### 寻找最大数的算法逻辑 该算法的核心在于遍历整个数组并逐一比较当前的最大值与下一个元素之间的大小关系。如果发现更大的值,则更新记录的最大值变量[^2]。 #### 示例代码 以下是一个完整的8086汇编语言程序,演示了如何从内存中的一个字节数组中找出最大的数字: ```assembly ; 初始化段定义 DATA SEGMENT ARRAY DB 10H, 20H, 3AH, 4FH, 5EH ; 数据区初始化为若干十六进制数 LENGTH EQU ($ - ARRAY) ; 计算数组长度 MAX DB ? ; 存储最大值的位置预留 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA ; 将数据段加载到AX寄存器 MOV DS, AX ; 设置DS指向数据段 LEA SI, ARRAY ; 获取ARRAY地址至SI寄存器 MOV CL, LENGTH ; 数组长度载入CL作为计数器 MOV AL, [SI] ; 假设第一个元素即为最大值 INC SI ; 移动指针到第二个元素位置开始比较 COMPARE_LOOP: CMP AL, [SI] ; 对AL(当前最大值)和[SI](下一位)做对比 JGE NEXT ; 如果AL>=当前位则跳过不修改MAX MOV AL, [SI] ; 否则将新的较大者赋给AL成为新MAX NEXT: INC SI ; 转向下一单元继续测试 DEC CL ; 减少循环数标志 JNZ COMPARE_LOOP ; 若未结束全部扫描则返回COMPARE_LOOP再执行一轮 STORE_MAX: MOV MAX, AL ; 把最终确定下来的最高值存储下来供后续调用查看 EXIT: HLT ; 结束运行状态 CODE ENDS END START ``` 此代码片段展示了如何通过逐步迭代的方式定位列表内的峰值项,并将其保存以便进一步处理或显示[^3]。 #### 关键点解析 - **数据准备**:先设定好待分析的数据集及其规模。 - **初始假设**:把首个成员当作临时意义上的‘极大’参照物。 - **逐检验**:依照顺序访问其余各成分并与现存最优解作对照;一旦遇到超越现有水平的新实例就立即取代前者角色。 - **终止条件**:当所有候选人均已被审查完毕之后停止进程并将结果妥善安置。 ### 性能考量 尽管上述方法简单易懂,在实际应用场景里可能还需要考虑更多因素如边界情况管理以及针对不同架构下的具体调整等问题。此外,对于大规模数据集合而言,单纯依靠软件层面的操作或许难以满足实时性需,此时可以引入专门设计用来加速此类运算任务的相关硬件设施或者采用更加先进的搜索策略加以改进[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值