本文主要是介绍SDUTOJ 2072 删数问题 贪心,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
删数问题
Time Limit: 1000MS Memory limit: 65536K
题目描述
键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
输入
输入有多组 每组包括原始数n,要去掉的数字数s;
输出
输出去掉s个数后最小的数
示例输入
178543 4
示例输出
13
提示
来源
示例程序
#include <stdio.h>
#include <string.h>struct node
{char ch;node *next;
};char s[110];int main()
{node *head = new node,*p,*q;int n;while(~scanf("%s%d",s,&n)){head->next = NULL;p = head;int len = strlen(s);int llen = len;if(len <= n){printf("0\n");continue;}for(int i = 0; i < len; i++){q = new node;q->ch = s[i];p->next = q;q->next = NULL;p = q;}while(n){p = head->next;q = head;while(p->ch == '0'){node *r = p->next;q->next = r;delete p;p = r;llen--;}if(llen <= n){printf("0\n");break;}while(p->next != NULL){if(p->ch <= p->next->ch){q = p;p = p->next;}elsebreak;}q->next = p->next;delete p;llen--;n--;}if(llen > n){p = head->next;while(p && p->ch == '0')p = p->next;if(!p)printf("0");while(p){printf("%c",p->ch);p = p->next;}printf("\n");}}return 0;
}
这篇关于SDUTOJ 2072 删数问题 贪心的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!