pat乙级1061C语言

1061 判断题 (15分)

判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。
输入格式:

输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。
输出格式:

按照输入的顺序输出每个学生的得分,每个分数占一行。
输入样例:

3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1
输出样例:

13
11
12

思路

感觉用结构体会更清楚一点,下面第一个直接算的,第二个用结构体,都差不多,就比较和累加

#include
#include

int main()
{
  int N,M;
  scanf("%d%d",&N,&M);
  int grade[M],true[M];
  for(int i=0;i<M;i++)
  {
    scanf("%d",&grade[i]);
  }
  for(int i=0;i<M;i++)
  {
    scanf("%d",&true[i]);
  }
  int student[N][M];
  int studentgrade[N];
  memset(studentgrade,0,sizeof(studentgrade));
  for(int i=0;i<N;i++)
  {
    for(int j=0;j<M;j++)
    {
      scanf("%d",&student[i][j]);
      if(student[i][j]==true[j])
      {
        studentgrade[i]+=grade[j];
      }
    }
  }
  for(int i=0;i<N;i++)
  {
    printf("%d\n",studentgrade[i]);
  }
}

二刷

#include
#include

typedef struct//结构体保存答案和分数
{
    int answer;
    int grade;
}title;

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    title t[m];
    for(int i=0;i<m;i++)
    {
        scanf("%d",&t[i].grade);//输入分数
    }
    for(int i=0;i<m;i++)
    {
        scanf("%d",&t[i].answer);//输入答案
    }
    for(int i=0;i<n;i++)//输入n个学生的成绩
    {
        int sum=0,temp;
        for(int j=0;j<m;j++)
        {
            scanf("%d",&temp);
            if(t[j].answer==temp)//如果答案正确
            {
                sum+=t[j].grade;//累加分数
            }
        }
        printf("%d\n",sum);//输出分数
    }
}

你可能感兴趣的:(pat考试,pat,c语言)