排版题.输出排列成菱形的字母
Time Limit:1s Memory Limit:1000k
Total Submit:8198 Accepted:2698
Problem
键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。(不超过240位)
输入数据均不需判错。
如果去掉了某几个位后得到的新整数开头为0,保留0。
Input
本题有多组测试数据,每组测试数据占一行。
一个高精度正整数N(N不超过240位)一个正整数M。(M为不大于N的长度的正整数)
N,M由一个空格分开。
Output
新的正整数,每组数据的输出占一行。不要多余的空白
Sample Input
456547 1
456547 2
456547 3
7773359 2
103 1
Sample Output
45547
4547
447
73359
03
C的求解及答案
#include <stdio.h>
#include <string.h>
void Delete(char* N, int len, int M)
{
char min = N[0];
int i, min_pos = 0;
if(M <= 0) return;
for(i = 1; i <= M; i++)
if(N[i] < min){
min = N[i];
min_pos = i;
}
if(min_pos){
memcpy(N, N + min_pos, len - min_pos + 1);
Delete(N, len - min_pos, M - min_pos);
}else{
Delete(N + 1, len - 1, M);
}
}
int main()
{
char N[300];
int M, len;
while(scanf("%s%d", N, &M) > 0){
len = strlen(N);
Delete(N, len, M);
printf("%s/n", N);
}
return 0;
}
Memory: 32K
Time: 0ms