ACM练习题3:最小新整数

在这里插入图片描述
以下是我自己写的代码,这里我参照了别人的文章,看看我的代码究竟为什么会这么复杂

//最小新整数
//输入m位的整数和整数k,整数上的所有位均不为0,删除整数上k个数,求生成的最小整数
//这道题难度没有给定两个数,然后求它们组合成的最小数难(这道题可以看看我以前做的,已经发布了
//上次的题我使用的是插入排序,那么今天这道题我就使用冒泡排序
#include <stdio.h>
#include <stdlib.h>
void bubblesort(int a[],int len)
{
    for(int j=1;j<len;j++)
    {
        for(int i=1;i<=len-j;i++)
        {
            int temp;
            if(a[i]>a[i+1])
            {
                temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
            }
        }
    }
}
int main()
{
    int n,i,i1,j,k,a[1000],temp,temp1,sum=0;/*一连串的全局变量,这样很不好,改进改进,有些该放在循环体内定义
    的放在循环体内才对*/
    scanf("%d",&n);
    int b[n];
    for(i=1;i<=n;i++)/*这里其实不必要用for循环,我们可以用n--,假如下面不使用n的话,这样就很方便简洁*/
    {
       sum=0;
       scanf("%d %d",&j,&k);
       temp=j;
       temp1=0;
        while(temp)
        {
            temp1++;
            a[temp1]=temp%10;
            temp=temp/10;
        }
        bubblesort(a,temp1);
        for(i1=1;i1<=temp1-k;i1++)
        {
            sum=sum*10+a[i1];
        }
        b[i]=sum;
    }
       for(i=1;i<=n;i++)
        printf("%d\n",b[i]);
    return 0;
}/*总体来说还是方法不一样,他的覆盖的思想很好,是我没有想到的*/

以下是别人写的代码https://congfen214.blog.csdn.net/这是作者,大家可以看看别人的思路,比我好很多

/这是改进以后的算法
//这个算法我是从csdn上的这个人https://congfen214.blog.csdn.net/看到的,大家可以去看看
//不得不说,哪个是菜鸡,一目了然
#include <stdio.h>
#include <stdlib.h>
#include <string.h\>

int main()
{
    int i,i1,n,k;
    char a[10010];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s %d",a,&k);
        int len;
        len=strlen(a);
        while(k--)
        {
            for(i=0;i<len-1;i++)
            {
                if(a[i]>a[i+1])
                {
                    for(i1=i;i1<len-1;i1++)
                        a[i1]=a[i1+1];
                }
            }
            len--;
        }
        for(i=0;i<=len-1;i++)
            printf("%c",a[i]);
        printf("\n");
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值