⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numdel.cpp

📁 从一个长度为n的数字序列中删除 m 个数字
💻 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 + -