学校1001:求值,1002.项目投标

来源:互联网 发布:ip端口查询工具 编辑:程序博客网 时间:2024/05/01 21:40

1001:求值

给你N个整数,对它们进行非递减排序,令P为排序后的奇数项之和,Q为排序后的偶数项之和,求T=|P-Q|。

input:输入的第一个整数T表示有多少组测试数据(1≤T≤10)。每组测试数据的第一行是整数N(1≤N≤50,000)。接下来是N行,每行是一个绝对值小于1000的整数

output:为每组测试数据输出一行,由T值组成。

sample input

1 3 1 3 2
sample outpu
2


#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
    long T,i,j,k,num[500000],t;
    long N;
    scanf("%ld",&T);
    for(k=0; k<T; k++)
    {
        long P=0;
        long Q=0;
        scanf("%ld",&N);
        for(j=0; j<N; j++)
        {
            scanf("%ld",&num[j]);
        }
        for(i=0; i<N-1; i++)
        {
            for(j=i+1; j<N; j++)
            {
                if(num[i]>num[j])
                {
                    t=num[i];
                    num[i]=num[j];
                    num[j]=t;
                }
            }
        }
        for(i=0; i<N; i++)
        {
            if((i+1)%2==1)
                P+=num[i];
            else
              Q+=num[i];
        }
        printf("%ld\n",abs(P-Q));
    }
    return 0;
}

注意点:1:int值最大为32767,所以用long

 2,long P=0; long Q=0;在循环内清零!

3,几大排序方法要搞懂!

4,i可以作为判断。


1002 :项目投标

某项目可以分为n个不同的子项目,每个子项目都是独立的。现在有m个公司来投标这些子项目,每个公司对这n个子项目都给出了报价。一个公司可以承担若干个项目,一个项目不能由2个或2个以上的公司共同完成。请你给出完成整个项目的最高和最低报价。

输入的第一个整数T表示有多少组测试数据(1≤T≤10)。每组测试数据的第一行是整数n(1≤n≤1000),表示有项目可以分n个子项目;第二行是整数m(1≤m≤1000),表示有m个公司来投标。然后是m行n列的正整数,第i行第j列的正整数k(1≤k≤100),表示第i家公司对第j个子项目的报价。

为每组测试数据输出两行,第一行是整个项目的最高报价,第二行是整个项目的最低报价.

1
5
5
90 90 90 85 90
90 85 90 90 85
90 90 85 90 90
90 90 90 90 85
85 90 85 90 90
450
425

#include <stdio.h>
#include <stdlib.h>
int price[1001][1001];
int main()
{
    int T,n,m,i,j,t;
    scanf("%d",&T);
    for(t=0;t<T;t++)
    {
        int sum_max=0,sum_min=0;
        scanf("%d %d",&n,&m);
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
            scanf("%d",&price[i][j]);
        for(i=0;i<n;i++)
           {
             int max=0,min=101;
              for(j=0;j<m;j++)
            {
              if(price[j][i]>max){max=price[j][i];}
              if(price[j][i]<min){min=price[j][i];}
            }
            sum_max+=max;
            sum_min+=min;
           }
        printf("%d\n%d\n",sum_max,sum_min);
    }
    return 0;
}

注意:1:比较大的数组应尽量声明在main函数外。

2: 还是要注意每次循环都要清零!



0 0