0
点赞
收藏
分享

微信扫一扫

删除数字问题

sullay 2022-01-25 阅读 60
c语言

已知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("删除数字个数应小于长度"); 
}
举报

相关推荐

0 条评论