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才对