祝大家情人节快乐!!武汉加油!
1462: [蓝桥杯2019初赛]组队
题目描述
作为篮球队教练,你需要从以下名单中选出1 号位至5 号位各一名球员,组成球队的首发阵容。
每位球员担任1号位至5号位时的评分如下表所示。请你计算首发阵容1号位至5号位的评分之和最大可能是多少?
该表格可以参考: team.txt.
解题思路
创建一个20*6的数组,利用两次循环分别找到每一列每一行最大元素保存在Max[5]数组中并求和
C语言FILE文件操作
链接: C语言详解 FILE文件操作.
打开文件
函数原型为:_CRTIMP FILE * __cdecl fopen(const char *, const char *);
第一参数为文件名,第二个参数为打开模式。
打开成功,fopen返回一个结构指针地址,否则返回一个NULL。如果没有指定文件路径,则默认为当前工作目录。如:
FILE *fp;
fp = fopen(“c:\temp\test.txt”, “r”) //由于反斜杠\是控制字符,所以必须再加一个反斜杠
使用fopen()函数打开的文件会先将文件复制到缓冲区。注意:所下达的读取或写入动作,都是针对缓冲区进行存取而不是磁盘,只有当使用fclose()函数关闭文件时,缓冲区中的数据才会写入磁盘。
“r”:只能从文件中读数据,该文件必须先存在,否则打开失败
“w”:只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
“a”:向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾
“r+”:可读/写数据,该文件必须先存在,否则打开失败
“w+”:可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
“a+”:可读/写数据,原来的文件不被删去,位置指针移到文件末尾
打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母’b’,以表示以二进制形式打开文件。
格式化存取函数
函数原型为:
_CRTIMP int __cdecl fprintf(FILE *, const char *, …);
_CRTIMP int __cdecl fscanf(FILE *, const char *, …);
它们与printf和scanf函数相仿,都是格式化读写函数。不同的是:fprintf和fscanf函数的读写对象不是终端(标准输入输出),而是磁盘文件。printf函数是将内容输出到终端(屏幕),因此,fprintf就是将内容输出到磁盘文件了。
实例: fprintf和fscanf函数的使用
#include <stdio.h>
int main()
{
FILE *fp;
int num = 10;
char name[10] = "Leeming";
char gender = 'M';
if((fp = fopen("info.txt", "w+")) == NULL)
printf("can't open the file! \n");
else
fprintf(fp, "%d, %s, %c", num, name, gender); //将数据格式化输出到文件info.txt中
fscanf(fp, "%d, %s, %c", &num, name, &gender); //从文件info.txt中格式化读取数据
printf("%d, %s, %c \n", num, name, gender); //格式化输出到屏幕
fclose(fp);
return 0;
}
解题代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[20][6];
int i,j,k,max,sum;
int Max[5];
FILE *fp;
if((fp=fopen("team.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);
}
else
{
for(i=0;i<20;i++)
{
for(j=0;j<6;j++)
{
fscanf(fp,"%d",&a[i][j]);
}
}
}
for(i=0;i<20;i++)
{
max=0;
for(j=1;j<6;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
k=j;
}
}
for(j=1;j<6;j++)
{
if(j!=k)
a[i][j]=0;
}
}
for(j=1;j<6;j++)
{
max=0;
for(i=0;i<20;i++)
{
if(a[i][j]>max)
max=a[i][j];
}
Max[j-1]=max;
}
sum=0;
for(i=0;i<5;i++)
{
sum+=Max[i];
}
printf("%d\n",sum);
return 0;
}