篮球赛,10人,每个人有一个战斗力n1-n10 分成两组(人数相等),战斗力差值最小
输入:1 2 3 4 5 6 7 8 9 10
输出:1
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
#include<stdio.h>
#include<math.h>
void main() {
int n=10/2,i,j;
int a[n];
int b[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
int diff=0;
for(i=0;i<n;i++){
diff+=a[i]-b[i];//计算两组数的差
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
int tp=a[i]-b[j];//计算两组数中单个元素的差值
int t=tp-diff;//单个元素差值和数组的差值比较
if(t*tp<0){ //以此条件判断是否需要交换
int ex=a[i];
a[i]=b[j];
b[j]=ex;
diff-=2*tp;//计算数据交换后两个数组的差值
}
}
}
printf("战斗力差值最小是: %d\n", abs(diff));
for(int i=0;i<n;i++)
printf("%d ", a[i]);
printf("\n");
for(int i=0;i<n;i++)
printf("%d ", b[i]);
printf("\n");
}
简单啊,先排序,再蛇形排列就可以了
1 2
4 3
5 6
8 7
9 10
int main()
{
int a[10];
int b[5],c[5];
int i,j;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
{
if(a[j] > a[j+1])
{
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
int k = 1;
for(i=0;i<10;i+=2)
{
if(k > 0)
{
b[i/2] = a[i];
c[i/2] = a[i+1];
}
else
{
b[i/2] = a[i+1];
c[i/2] = a[i];
}
k*=-1;
}
printf("第一组为:");
for(i=0;i<5;i++)
printf("%d ",b[i]);
printf("\n");
printf("第二组为:");
for(i=0;i<5;i++)
printf("%d ",c[i]);
printf("\n");
return 0;
}