2000.5请你编程 oldbug 2000年 第20期 大家好!《请你编程》又与你们见面了。《请你编程》得到了广大朋友的关心和支持,我在这里表示衷心的感谢。《请你编程》是一个读者朋友直接参与的栏目,是一个体现自我的园地,希望有编程愿望的朋友,无论是编程高手,还是初学者都能参与进来,我们将会认真对待每一份作品。下面请看2000.1期磐安读者马拥军的程序。   本人用Turbo c 2.0编程实现了题目的要求其解题思路如下:   6×6的箱子有以下几种装法:(1)装6×6产品1只;(2)装5×5产品1只,并且能装1×1产品11只;(3)装4×4产品1只,并且能装2×2产品5只;(4)装3×3产品4只;(5)装2×2产品9只;(6)装1×1产品36只;为了节约箱子,应尽可能先把大的产品装掉,再装小的产品。源程序如下:   #include   main()   {int a[7];   void fun();   FILE *fp;   if((fp=fopen(″packets.txt″,″r″))==NULL)    {printf(″can not open packets.txt!\n″);    exit(0);}   while(fscanf(fp,″%d%d%d%d%d%d″,&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])==6)   fun(a); /*a[1]到a[6]分别用于存放1×1到6×6产品的个数*/   fclose(fp);}   void fun(int *m)   {if(m[2]>=5*m[4]) /*若2×2的产品数大于4×4产品数的5倍,则4×4产品装剩下的空间*/   m[2]-=5*m[4]; /*可全部用于装2×2的产品,否则一部分可用于装2×2的产品一部分*/   else /*可用于装1×1的产品*/   m[1]-=20*m[4]-4*m[2],m[2]=0;   switch(m[3]%4) /*3×3的产品装剩下的空间可用于装2×2和1×1的产品*/   {case 0:   m[3]/=4;   break;   case 1:   m[3]=m[3]/4+1;   if(m[2]>=5)   m[2]-=5,m[1]-=7;   else   m[1]-=27-m[2]*4,m[2]=0;   break;   case 2:   m[3]=m[3]/4+1;   if(m[2]>=3)   m[2]-=3,m[1]-=6;   else   m[1]-=18-m[2]*4,m[2]=0;   break;   case 3:   m[3]=m[3]/4+1;   if(m[2]>=1)   m[2]--,m[1]-=5;   else   m[1]-=9-m[2]*4;   break; }if(m[2]%9!=0) /*若剩下的2×2产品的数量不是9的倍数,则装剩下的空间可用于*/   m[1]-=36-4*(m[2]%9),m[2]=m[2]/9+1; /*装1×1的产品*/   else   m[2]/=9;   m[1]-=11*m[5];   if(m[1]<0)   m[1]=0;   else   m[1]=m[1]%36?m[1]/36+1:m[1]/36;   m[0]=m[1]+m[2]+m[3]+m[4]+m[5]+m[6];   printf(″%d\n″,m[0]); }   本期请你编程题目   某国足球队屡战屡败,深深地伤透了全体球迷的心。痛定思痛,该国从国外“聘”一台超级电脑——“BLACK”当球队主教练。这台电脑对足球排兵布阵有自己的理解:它把所有球员按防守能力、组织能力、进攻能力三个方面进行打分,并把一个阵法中所有参加防守的队员的防守分、参加组织的队员的组织分、参加进攻的队员的进攻分都加起来作为该阵法的分数。“BLACK”主教练宣称,它要用得分最高的阵法作为下次出赛的主力阵容。   例如:如果“BLACK”要挑防守队员、组织队员、进攻队员各1名。现在有3个队员:A,B,C,他们的防守得分、组织得分、进攻得分分别是A:0、0、0;B:100、50、0;C:30、100、10。所以,最佳的阵法是:防守:B(100)+组织:C(100)+进攻:A(0),这样的阵法得分是200分,是最高的。   现在,“BLACK”对球员的打分出来了,就请你也来当一次主教练,排一下阵法。   输入:数据从文本文件football.txt中获得,输入数据格式为:   1.第一行是4个整数:N、A、B、C,整数间用空格分开。其中N表示有N名球员供挑选、A表示要A名防守队员,B表示要B名组织队员、C表示要C名进攻队员。   2.以下为2*N行,每2行为一个队员的数据:其中第1行为队员名字,最长8个字符;第2行为3个整数I、J、K,依次表示该队员防守、组织、进攻3方面的得分,整数间用空格分开。   输出:到电脑屏幕,输出格式为A+B+C+1行,前A+B+C每行为一个阵法球员信息(名字、位置、该位置得分)。最后一行输出该阵法的总分。   输入范例:   3 1 1 1   A   0 0 0   B   100 50 0   C   30 100 10   输出范例:   A:进攻:0   B:防守:100   C:组织:100   阵法总分:200   本期题目由上海的oldbug提供。