|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给两组数,各n个。
请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。
例如两组数分别为:1 3 -5和-2 4 1
那么对应乘积取和的最小值应为:
(-5) * 4 + 3 * (-2) + 1 * 1 = -25
输入格式
第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。
n<=8,T<=1000
输出格式
一个数表示答案。
样例输入
2
3
1 3 -5
-2 4 1
5
1 2 3 4 5
1 0 1 0 1
样例输出
-25
6
<#include<stdio.h>
int main()
{
int a[9]={0},b[9]={0},n,i,j,s=0,t,m;
scanf("%d",&t);
if(t<1) return 1;
while(t!=0)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
scanf("%d",&b[i]);
}
for(i=0;i<n-1;i++)//冒泡排序
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])//从小到大
{
m=a[j];a[j]=a[j+1];a[j+1]=m;
}
if(b[j]<b[j+1])从大到小
{
m=b[j];b[j]=b[j+1];b[j+1]=m;
}
}
}
for(i=0;i<n;i++)
{
s=s+a[i]*b[i];
}
printf("%d",s);
t--;
s=0;
}
return 0;
}>
样例输入结果是-22,9,请问哪里出了错
本帖最后由 jackz007 于 2021-10-27 21:54 编辑
- #include<stdio.h>
- int main()
- {
- int a[9]={0},b[9]={0},n,i,j,s=0,t,m;
- scanf("%d",&t);
- if(t < 2) return 1 ; // 【这里修改】
- while(t > 1) // 【这里修改】
- {
- scanf("%d",&n) ;
- for(i=0;i<n;i++) scanf("%d" , & a[i]) ; // 【这里修改】
- for(i=0;i<n;i++) scanf("%d" , & b[i]) ; // 【这里修改】
- for(i=0;i<n-1;i++) //冒泡排序
- {
- for(j=0;j<n-1-i;j++)
- {
- if(a[j]>a[j+1]) //从小到大
- {
- m=a[j];a[j]=a[j+1];a[j+1]=m;
- }
-
- if(b[j]<b[j+1]) //从大到小
- {
- m=b[j];b[j]=b[j+1];b[j+1]=m;
- }
- }
- }
- for(i=0;i<n;i++)
- {
- s=s+a[i]*b[i];
- }
- printf("%d",s) ;
- t--;
- s=0;
- }
- printf("\n") ; // 【添加此句】
- return 0;
- }
复制代码
楼主可以测试一下
编译、运行实况:
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- 2
- 3
- 1 3 -5
- -2 4 1
- -25
- D:\00.Excise\C>
复制代码
|
|