竞赛练习题Ⅰ

本文介绍了三道编程题目:1)如何在去除数字的某些位后得到最大的回文数;2)如何按字典序输出以特定字符串为前缀的所有单词;3)在避免装货数为13的情况下,如何最小化送快递的货车数量。每题提供了解题思路和部分代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题:回文数

------取自优快云竞赛第22期第四题

题干:给定任意一个数字 m,然后给出数字 n,则需在 m 中去掉 n 位数,保持各位顺序不变的情况下,得到最大数。

 实例:

输入 12314 3
输出 34 

思路:首先进行数据m的排序存储,这里我们使用数组进行每一位数据的存储(0~9),

我的思想是从这个m中拿去n个数据,你也可以换成  “从m中拾取j-n个数据,组成最大值,这里j是数组的数据个数” 。在第一轮遍历中我们进行n次拿取,里面嵌套第二轮遍历,寻找每次拿去时最小值 并记录其位置,第二轮结束后相应的置-1,最后在整合数据、输出数据即可

#include <stdio.h>
int main()
{
	long long m,n;  //n为去掉的位数 
	long long m1=m;//替代品m1 
	int arr[10000];
	int j=0;
	
	//int arr1[10000];//最终去掉后的数的数组存放 
	scanf("%lld%lld",&m,&n);
	while(m/10||m==1)
	{
		int a=m%10;
		arr[j]=a;//这样m的每一位都分出来然后倒置   123---3 2 1 
		j++;
		m=m/10; 
	}
	//j-n;留下的位数 
	int min_location=0;
	
	for(int q=0;q<n;q++)
	{
		int min=10;
		for(int i =0;i<j;i++)
	{
		
		if((arr[i]!=-1)&&(arr[i]<min))
		{
			min = arr[i];
			min_location=i;//留下min的位置 
		}	
	}
	arr[min_location]=-1;
	}
	long long final=0;
	for(int w=(j-1);w>=0;w--)
	{
		if(arr[w]!=-1)
		{
			final=final*10+arr[w];
			
		}	
	}
	printf("%lld",final);
	return 0;
	
 } 

注意:边界测试,如果范围是10^15那么测试肯定会有一个数是10^15,这个就是就是 !!

第二题 :合并序列

题干:有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词。

实例:

输入

5
no
ka 
ki
ku
ki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

K-Pioneer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值