📄 numdel.cpp
字号:
//数字删除问题 给定的 n位数字中 删除 m个 使余下的数字最小
//注意 输入的 m要小于 n 另外不要没有意义的数
#include<stdio.h>
#include<stdlib.h>
#define N 20
void readData(int a[])
{
int i=0;
char ch;
printf("shuru:");
ch = getchar();//注意这里是怎么用 getchar读入数据的
while(ch != '\n')
{
a[i] = ch - '0';
ch = getchar();
i++;
}
}
void writeData(int a[],int n)
{
int i;
for(i = 0;i<n;i++)
{
if(a[i] != -1)
printf("%d",a[i]);
}
}
void delNum(int a[],int m,int n)
{
int i;
int j,k,flag;
while(m != 0)
{
i = 1;
flag = 1; //标记变量 测试循环中是否还存在 坡型
for(;i<n-1;i++)
{
if(a[i]>a[i+1] && a[i]>a[i-1]) //如果出现 坡型
{
for(j = i;j<n;j++) //所有元素前移 删除 a[i]
{
a[j] = a[j+1];
}
m--; //删除一个数字 删除次数减一
n--; //删除一个数字 有效长度减 1
flag = 0;
break;
}
}
if(flag == 1) //如果数组中不存在坡型了
{
if(a[0]>a[n-1]) //判断是递增还是递减
for(k=0;k<m;k++)
a[k] = -1;
else
for(k=0;k<m;k++)
a[n-1-k] = -1;
m = 0;
}
}
}
int main()
{
int m,n,i;
int num[N];
for(i = 0;i<N;i++) //初始化
num[i] = -1;
scanf("%d",&n);
scanf("%d",&m);
getchar(); //用于存储上次输入的回车符号
readData(num);
delNum(num,m,n);
writeData(num,n);
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -