C语言的程序编程,就快要交了没时间做,在线等急

发布网友 发布时间:2022-04-23 17:10

我来回答

1个回答

热心网友 时间:2022-05-03 05:47

#include<stdio.h>
#include<malloc.h>
int eq(int *,int ,int );
void ord(int *,int);
int main()
{
    int n,k,i,nSave,*p;//(5<n< 1000,0<k<2000)
aa: printf("\n 请输入手牌个数[5~1000]及裁判数值[0~2000]:");
    scanf("%d%d",&n,&k);
    if(n<5 || n>1000 || k<0 || k>2000)
    {
        printf("\n 数值越界,重新输入!!");
        goto aa;
    }


bb: printf("\n 请输入%d个手牌整数[0~1000]:",n);
    p=(int*)malloc(sizeof(int)*n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&nSave);
        if(n<0 || n>1000)
        {
            free(p);//释放内存
            p=NULL;//防止野指针
            printf("\n 数值越界,重新输入!!");
            goto bb;
        }
        else
        {
            p[i]=nSave;
        }
    }
    if(eq(p,n,k)==0)
    {
        printf("\n 出:NO!!");
        printf("\n 余牌:");
        for(i=0;i<n;i++)
        {
            printf("%d ",p[i]);
        }
    }
    else
    {
        printf("\n 出:%d %d",p[n-2],p[n-1]);
        printf("\n 余牌:");
        for(i=0;i<n-2;i++)
        {
            printf("%d ",p[i]);
        }
    }


}
int eq(int *p,int n,int k)//参数1:待处理的数组指针    参数2 数组元素个数    参数3 条件对比值K
//在n个整数中,找出2个符合条件(和为K)的整数,
//重组数组  将符合条件的两个数放在数组末尾,剩余数字按升序排列
//如果返回值是1 找到;0没找到   说明没有满足条件的值
{
    int num2[2],pSave[n-2],i,j,nflog=0,index[2];//找到符合条件值 nflog置1,
    for(i=0;i<n;i++)
    {
        num2[0]=p[i];
        for(j=i+1;j<n;j++)
        {
            num2[1]=p[j];
            if(num2[0]+num2[1]==k)
            {
                nflog=1;
                break;
            }
        }
        if(nflog==1)
        {
            index[0]=i;
            index[1]=j;
            break;
        }
    }
    if(nflog==1)//找到符合条件的两个整数,开始重组原数组
    {
        j=0;
        for(i=0;i<n;i++)
        {
            if(i==index[0] || i==index[1])
                continue;//排除找出的2个数
            pSave[j]=p[i];
            j++;
        }

        for(i=0;i<n-2;i++)
        {
            p[i]=pSave[i];
        }
        p[i]=num2[0];
        p[i+1]=num2[1];
        ord(p,n-2);//将除最后2位,其他按照升序重组排列
        return 1;
    }
    else
    {
        ord(p,n);//按照升序重组排列
        return 0;
    }
}

void ord(int *p,int len)//对数组元素重新按升序排列,参数1:待处理数组   参数2:元素个数
{
    int nSave,i,j,con=0;
    for(i=0;i<len;i++)
    {
        for(j=con++;j<len;j++)
        {
            nSave=p[j];
            if(nSave<p[i])
            {
                p[j]=p[i];
                p[i]=nSave;
            }
        }
    }

}

追问可是你有个数值不对啊,44应该是45才对

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com