高精度整數去位去最小問題
排版題.輸出排列成菱形的字母
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