已知n位数字正整数a,去除任意k位数,使剩下数字按原次序排列成新正整数,使其最大
C语言
#include<stdio.h>
#include<string.h>
#define N 100
int del(char a[])
{int i,j,n;
n=strlen(a);//再测一边长度,为删除位数在1以上
for(i=0;i<n;i++)
if(a[i]<a[i+1])
{j=i;
break;
}
if(i==j)//乱序时,左边的数小于右边时,删掉左边的数
for(;i<=n;i++)
a[i]=a[i+1];
else
j=i-1;//正序即从大到小排列或全部相等,删除最右边数
return j;
}
int main()
{
char a[N];
int i,k,n,s;
scanf("%s",a);//输入删除数字
scanf("%d",&k);//删除位数
n=strlen(a);
s=0;
if(k<n)
{
{for(i=1;i<=k;i++)
if(s!=n-1)//乱序时
s=del(a);
else
break;
}
for(i=0;i<n-k;i++)
printf("%c",a[i]);
printf("\n");}
else
printf("删除数字个数应小于长度");
}
重新排列最大
#include<stdio.h>
#include<string.h>
#define N 100
int del(char a[])
{int i,j,n;
n=strlen(a);//再测一边长度,为删除位数在1以上
for(i=0;i<n;i++)
if(a[i]<a[i+1])
{j=i;
break;
}
if(i==j)//乱序时,左边的数小于右边时,删掉左边的数
for(;i<=n;i++)
a[i]=a[i+1];
else
j=i-1;//正序即从大到小排列或全部相等,删除最右边数
return j;
}
int main()
{
char a[N],m;
int i,k,n,s;
scanf("%s",a);//输入删除数字
scanf("%d",&k);//删除位数
n=strlen(a);
s=0;
if(k<n)
{
{for(i=1;i<=k;i++)
if(s!=n-1)//乱序时
s=del(a);
else
break;
}
for(i=0;i<n-k-1;i++)
if(a[i]<a[i+1])
{m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
for(i=0;i<=n-k;i++)
printf("%c",a[i]);
printf("\n");}
else
printf("删除数字个数应小于长度");
}
使其最小
#include<stdio.h>
#include<string.h>
#define N 100
int del(char a[])
{int i,j,n;
n=strlen(a);//再测一边长度,为删除位数在1以上
for(i=0;i<n;i++)
if(a[i]>a[i+1])
{j=i;
break;
}
if(i==j)//乱序时,左边的数大于右边时,删掉左边的数
for(;i<=n;i++)
a[i]=a[i+1];
else
j=i-1;//正序即从大到小排列或全部相等,删除最左边数
return j;
}
int main()
{
char a[N];
int i,k,n,s;
scanf("%s",a);//输入删除数字
scanf("%d",&k);//删除位数
n=strlen(a);
s=0;
if(k<n)
{
{for(i=1;i<=k;i++)
if(s!=n-1)//乱序时
s=del(a);
else
break;
}
for(i=0;i<n-k;i++)
printf("%c",a[i]);
printf("\n");}
else
printf("删除数字个数应小于长度");
}
重新排列最小
#include<stdio.h>
#include<string.h>
#define N 100
int del(char a[])
{int i,j,n;
n=strlen(a);//再测一边长度,为删除位数在1以上
for(i=0;i<n;i++)
if(a[i]>a[i+1])
{j=i;
break;
}
if(i==j)//乱序时,左边的数小于右边时,删掉左边的数
for(;i<=n;i++)
a[i]=a[i+1];
else
j=i-1;//正序即从大到小排列或全部相等,删除最右边数
return j;
}
int main()
{
char a[N],m;
int i,k,n,s;
scanf("%s",a);//输入删除数字
getchar();
scanf("%d",&k);//删除位数
n=strlen(a);
s=0;
if(k<n)
{
{for(i=1;i<=k;i++)
if(s!=n-1)//乱序时
s=del(a);
else
break;
}
for(i=0;i<n-k-1;i++)
if(a[i]>a[i+1])
{m=a[i];
a[i]=a[i+1];
a[i+1]=m;
}
for(i=0;i<=n-k;i++)
printf("%c",a[i]);
printf("\n");}
else
printf("删除数字个数应小于长度");
}