数码串和oj

原代码:

复制代码
#include<stdio.h>
#include<string.h>
int min(int a,int b){
	return (a>b)?b:a;
}
int main(){
	int T;
	scanf("%d",&T);
	getchar();
	while(T--){
		char s[100005];
		scanf("%s",s);
		int len=strlen(s);
		if(len==1){
			printf("%s\n",s);
			continue;
		}
		int i=0;
		for(int d=0;d<len-1;d++){
			if(s[d]>s[d+1]){
				char temp[100005];
				if(d!=0)
				strncpy(temp,s,d-1);
				strncpy(temp+d,s+d+1,len-d-1);
				temp[len-1]=min(s[d]-'0'+1,9)+'0';
				temp[len]='\0';
				strcpy(s,temp);
			}
		}
		printf("%s\n",s);
	}
}

显然时间超限了,现在用空间换时间,引入整数数组,并且长度为len3倍

复制代码
#include<stdio.h>
#include<string.h>
#define maxsize 100000
int min(int a, int b) {
	if (a >= b) {
		return b;
	} else {
		return a;
	}
}
int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		char str[maxsize];
		scanf("%s", str);
		int len = strlen(str);
		int arr[len * 9];
		for (int i = 0; i < len; i++) {
			arr[i] = str[i] - '0';
		}
		int z = len;

		for (int i = 0; i < z; i++) {
			if (arr[i] > arr[i + 1]) {
				arr[z] = min(arr[i] + 1, 9);
				z++;
				arr[i] = 11;
			}
		}
		for (int i = 0; i < z; i++) {
			if (arr[i] != 11) {
				printf("%d", arr[i]);
			}
		}
		printf("\n");
	}
	return 0;
}
相关推荐
Eric 辰东16 分钟前
【C 语言程序的编译和链接】详解编译链接过程
c语言·笔记·算法·学习方法
并不喜欢吃鱼16 分钟前
从零开始 C++-----十一【C++ 数据结构】红黑树全解析:从定义到工程实现(一文搞定,十分详细)
开发语言·数据结构·c++
星恒随风16 分钟前
C语言数据结构排序算法详解(上):从插入排序、希尔排序到选择排序、堆排序
c语言·数据结构·笔记·学习·排序算法
迈巴赫车主19 分钟前
蓝桥杯21247弹跳鞋java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
jghhh0128 分钟前
基于 Weiler-Atherton 算法的多边形裁剪程序实现
算法
不爱吃糖の糖糖29 分钟前
RAG 04:向量数据库与索引算法
数据库·算法
MegaDataFlowers30 分钟前
226.翻转二叉树
算法
alphaTao1 小时前
LeetCode 每日一题 2026/5/25-2026/5/31
算法·leetcode
菜菜的顾清寒1 小时前
力扣HOT100(41)动态规划-杨辉三角
算法·leetcode·动态规划
Cthy_hy1 小时前
Python算法竞赛:集合去重+字典映射 核心用法一站式整理
数据结构·python·算法