最小数游戏

描述:

有一个长度为n的整数a,任意选取k个数删除(k<=n)编程求删除后 所的整数最小

eg:a=1324221 k=5  删除后 a=121

 

#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct{
 int l;//a整数所在位置 最高位为零   以此类推 
 int v;//各位的数值
}value;//结构体

void paixu(int n,value *&a)//排序 按各位的数值

 
 for(int i=0;i<n;i++)
 { 
   for(int j=i+1;j<n;j++)
   {
    if(a[j].v <= a[i].v)
    { 
     value temp ;
     temp=a[i];
     a[i]=a[j];
     a[j]=temp;
    }
   }
 }
  
}
void paixu2(int n,value *&a)//按各位数值所在的位置排序

 
 for(int i=0;i<n;i++)
 { 
   for(int j=i+1;j<n;j++)
   {
    if(a[j].l < a[i].l)
    { 
     value temp ;
     temp=a[i];
     a[i]=a[j];
     a[j]=temp;
    }
   }
 }
  
}
int _tmain(int argc, _TCHAR* argv[])
{
 int N;
 int L;
 cin>>N;
 cin>>L;
 value * p = new value[N];//整数a的各个位存放在里面

 value * p1 = new value[N-L];//删除后的整数
 for(int i=0;i<N;i++)
 {
  cin>>p[i].v;
  p[i].l=i;
  
 }
 paixu(N,p);//排序(从小到大)后 因为要去删除后最小的值 所以排序

 for(int i=0;i<N-L;i++)//取前N-L个数 则为删除后最小的N-L个数
 {
  p1=p;

 }
 
    paixu2(N-L,p1);//因为最小数各位的位置是不能变的  所以再把取到的最小数按位置排序
 for(int i=0;i<N-L;i++)
 {
  cout<<p1[i].v;//输出排序后 结构体的各位置

 }
 

 return 0;
}

 

 // 上述两个排序算法 的改进  每次循环 只交换一次

void paixu(int n,value *&a)//排序 按各位的数值

   int k;

  value temp;
 for(int i=0;i<n;i++)
 { 

     k=i;
   for(int j=i+1;j<n;j++)
   {

    if(a[j].v <= a[i].v)
    { 

         k=j;
    }

    if(k!=i)

    {

         temp=a[i];
     a[i]=a[j];
     a[j]=temp;

    }
   }
 }
  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值