C语言一算法 删除数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 00:29:44
请大家指教一个程序,怎么我在vijos上评测,只得了30分
描述 Description
基德穿破层层障碍终于来到了"忧郁的生日"面前."忧郁的生日"如前题所述封存于密码锁中.这个密码锁不是一般的密码锁,这是不一
般的密码锁!这个密码锁上显示着一串数字.旁边还有一串提示:The password is in the number.The number is on screen,you s-
hould delete N numbers as 1,2 or 3...9.The last number should be the smallest of all.The last number is the passwo-
rd(基德:靠,提示居然是E文,无视我400的智商吗?!).为了成功盗取并尽快赶去青子家,基德请你编一个程序解决这个密码锁。
输入格式 Input Format
输入共2行
第一行为一个不超过250位的数字;
第二行则为N。
样例输入 Sample Input
178543
4

样例输出 Sample Output
13

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

void del(char a[],int t)
{int i,j=0;
for (i=0;i<t;i++)
{if(i>=t) break;
if(a[i]>a[i+1])
{for (j=i;j<t;j++)
a[j]=a[j+1];break;}
}
}
main()
{long i,s,t;
char a[260];
scanf("%s",a);
scanf("%d"

The last number should be the smallest of all.这题的意思是让你先排序,再删除输入的字N后面的数.包括N.
代码要的话我发上来

算法:输入数字字符串str,长度为len,删除N个数,结果放在res中
题目的意思可以看为把(len-N)个数取出来组成一个最小数,
那么,
首先,为了保证结果的长度正确,第一个数应该在前N+1个数(下标:0~N)中查找,假设len=10,N=3,最小下标min=2,则把下标2的数存入res中
再查第二个数,注意应从原数字串str下标min+1开始查找,此时N=3-min=1,相当于已经删除2个数
。。。。。
如此类推,直到N=0,N个数删除结束。此时还要注意,可能当前还未查找结束,所以要把当前下标以后的数都依次存入res中
(此过程我是用递归实现的,循环也是可以,你可以考虑一下)

#include <stdio.h>
#include <string.h>

void dores(char *str, int n, char *res);

int main()
{
char str[250] = {0}, res[250] = {0};
int N;

scanf("%s", str);
scanf("%d", &N);

dores(str, N, res);

printf("%s\n", res);

return 0;
}

void dores(char *str, int n, char *res)
{
int len = strlen(str);
int i, min_index = 0;

if(n == 0)
{
for(i = 0; i < len