C 如何删除某个数字中的特定数字,以使获得的数字最小?
如何删除某个数字中的特定数字,以使获得的数字最小 具体来说,我想编写一个函数C 如何删除某个数字中的特定数字,以使获得的数字最小?,c,min,digit,C,Min,Digit,如何删除某个数字中的特定数字,以使获得的数字最小 具体来说,我想编写一个函数int remove\u digits(int-large,int-num\u digits\u to\u remove),这样: 任何要删除的num\u digits\u数字都将从large中删除,就像从其字符串表示中删除字符一样 返回的数字具有步骤1中删除数字后的最低可能值 例如,从69469813中删除4位数字将得到4613 我更喜欢用C写的答案。想法: char number[] = "69469813"; ch
int remove\u digits(int-large,int-num\u digits\u to\u remove)
,这样:
num\u digits\u
数字都将从large
中删除,就像从其字符串表示中删除字符一样69469813
中删除4位数字将得到4613
我更喜欢用C写的答案。想法:
char number[] = "69469813";
char digits[ARRAY_SIZE(number)];
size_t i;
// sort digits; complexity O(n * log n);
sort_digits(digits, number); // -> digits becomes "99866431"
for (i = 0; i < number_of_digits_to_be_removed; ++i) {
size_t j;
for (j = 0; j < ARRAY_SIZE(number); ++j) {
if (number[j] == digits[i]) {
number[j] = 'X'; // invalidate it
break;
}
}
}
for (i = 0; i < ARRAY_SIZE(number); ++i)
if (number[i] != 'X')
printf("%c", number[i]);
charnumber[]=“69469813”;
字符数字[数组大小(数字)];
尺寸i;
//数字排序;复杂性O(n*logn);
对数字(数字、数字)进行排序;//->数字变为“99866431”
对于(i=0;i<要删除的位数;++i){
尺寸j;
对于(j=0;j
整个事物的复杂性为O(n*m) 我不懂C,但下面是我在java中的实现方法:
String original = "69469813";
String result = "";
int numNeedToBeTaken = 4;
int numLeft = original.length() - numNeedToBeTaken;
while(result.length() < numLeft)
{
String temp = original.substring(0,original.length()-numNeedToBeTaken+1);
int smallest= 9;
int index = 0;
for(int i = 0; i<temp.length(); i++)
{
int number = Integer.parseInt(Character.toString(temp.charAt(i)));
if( number < smallest)
{
smallest = number;
index = i+1;
}
}
numNeedToBeTaken--;
result = result.concat(String.valueOf(smallest));
original = original.substring(index);
}
Log.d("debug","result: "+result); //tested to work with your example, returns 4613
stringoriginal=“69469813”;
字符串结果=”;
int numneedtobetake=4;
int numLeft=original.length()-numneedtobetake;
while(result.length() 对于(int i=0;i而言,基本思想是,如果您只能删除一个数字,那么您需要删除第一个数字(从最高有效数字开始),然后是一个较小的数字
例如,如果您的号码是123432,您希望删除4(因为它后面跟着3),结果是12332
然后,对要删除的数字重复此过程:
char *num = "69469813";
char *buf = malloc(strlen(num)+1);
size_t to_remove = 4;
while (to_remove --> 0) {
char *src = num;
char *dst = buf;
while (*src < *(src+1)) { *dst++ = *src++; } // Advance until the next digit is less than the current digit
src++; // Skip it
while (*dst++ = *src++); // Copy the rest
strcpy(num, buf);
}
printf("%s\n", num); // Prints 4613
char*num=“69469813”;
char*buf=malloc(strlen(num)+1);
要移除的尺寸=4;
同时(删除-->0){
char*src=num;
char*dst=buf;
而(*src<*(src+1)){*dst++=*src++;}//前进,直到下一个数字小于当前数字
src++;//跳过它
while(*dst++=*src++);//复制其余部分
strcpy(num,buf);
}
printf(“%s\n”,num);//打印4613
查看模运算符。欢迎使用StackOverflow!我编辑了您的问题,以使您的算法更清晰。我是否正确,或者您是否尝试执行其他操作?那么,您想删除数字中的最大数字吗?在C int中,除法是地板除法…因此您可以/10并反复检查%10,从右到左遍历数字,直到它为0。如何从69469813到4613?请注意,ensc的解决方案不适用于,例如,319只删除一次。在这种情况下,您希望删除3(如在我的解决方案中所做的),而不是9。