切换到宽版
  • 7734阅读
  • 7回复

原来NOIP2005第一题Scholar用C编写是这么的简单…… [复制链接]

上一主题 下一主题
离线stevenjl
 

只看楼主 倒序阅读 0 发表于: 2006-09-03
  1. #include <stdio.h>
  2. main()
  3. {
  4. int n,a[101],b[101],e[101],i,jj[101],max,maxn,total;
  5. char c[101],d[101],name[101][25];
  6. FILE *input = fopen("scholar.in","r");
  7. FILE *output = fopen("scholar.out","w");
  8. fscanf(input,"%d",&n);
  9. for (i=1;i<= n; i++)
  10.   {
  11.   fscanf(input,"%s %d %d %c %c %d",&name[i],&a[i],&b[i],&c[i],&d[i],&e[i]);
  12.   }
  13. for (i=1; i<= n; i++)
  14.   {
  15.   jj[i]=0;
  16.   jj[i] += ((a[i] > 80) && (e[i] >= 1))?8000:0;
  17.   jj[i] += ((a[i] > 85) && (b[i] > 80))?4000:0;
  18.   jj[i] += (a[i] > 90)?2000:0;
  19.   jj[i] += ((a[i] > 85) && (d[i] == 'Y'))?1000:0;
  20.   jj[i] += ((b[i] > 80) && (c[i] == 'Y'))?850:0;
  21.   }
  22. max=total=0;
  23. for (i=1; i<= n; i++)
  24.   {
  25.   if (jj[i] > max){max=jj[i]; maxn=i;}
  26.   total +=jj[i];
  27.   }
  28. fprintf(output,"%s\n%d\n%d\n",name[maxn],max,total);
  29. fclose(output);
  30. return 0;
  31. }


  当年我在考场上做这道题目的时候,用Pascal……
  什么while读空格啦,一个字符一个字符读啊,乱七八糟的……虽然最后写对了,但浪费了很多时间,就只有120了~~~55555~~
  原来C是这么简单,一句
  1. fscanf(input,"%s %d %d %c %c %d",&name[i],&a[i],&b[i],&c[i],&d[i],&e[i]);
,就全部解决问题了说……
  恨自己没有早点学C……
  还有当年的一个总奖金额要用longint存储,骗倒了一大片人……C里面int就等于pascal的longint,不会溢出,太好了……
Dream Walker...
离线r134a
只看该作者 1 发表于: 2006-09-04
骗倒了一大片人……
.


祝大家明年NOIP大获全盛!


.
离线archimedes

只看该作者 2 发表于: 2006-09-04
我觉得还是Pascal简单,
  1. fscanf(input,"%s %d %d %c %c %d",&name[i],&a[i],&b[i],&c[i],&d[i],&e[i]);

烦死了
离线stevenjl

只看该作者 3 发表于: 2006-09-04
你觉得用Pascal这句怎么写?
Dream Walker...
离线lijianhet
只看该作者 4 发表于: 2006-10-23
有更简单的
fin>>name[i]>>a[i]>>b[i]>>c[i]>>d[i]>>e[i]);
离线qinbo_1990
只看该作者 5 发表于: 2006-11-09
还要注意%s 和%d之间的空格!!!!!
离线edwing
只看该作者 6 发表于: 2006-11-15
其实不用那么麻烦,这样还更好!
#include <stdio.h>
#include <string.h>

int main()
{
  FILE *in = fopen("scholar.in", "r"),
    *out = fopen("scholar.out", "w");
  int n, m, s, e;
  char name[21], c, w;
  int i, max, sum, t;
  char maxname[21];
 
  fscanf(in, "%d", &n);
  max = sum = 0;
  for (i = 0; i < n; i++)
  {
    fscanf(in, "%s %d %d %c %c %d", name, &m, &s, &c, &w, &e);
    t = 0;
    if (m > 80 && e >= 1) t += 8000;
    if (m > 85 && s > 80) t += 4000;
    if (m > 90) t += 2000;
    if (m > 85 && w == 'Y') t += 1000;
    if (s > 80 && c == 'Y') t += 850;
    if (t > max)
    {
        max = t;
        strcpy(maxname, name);
    }
    sum += t;
  }
  fprintf(out, "%s\n", maxname);
  fprintf(out, "%d\n", max);
  fprintf(out, "%d\n", sum);
  fclose(in);
  fclose(out);
  return 0;  
}
离线stevenjl

只看该作者 7 发表于: 2006-11-15
恩,不存储每个人的数据会更快~
Dream Walker...
快速回复
限100 字节
 
上一个 下一个