3 solutions

  • 1
    @ 2021-10-30 18:18:17

    这个题还行,仔细一点就可以

    `
    #include<bits/stdc++.h>
    using namespace std;
    struct s{
    	char na[100];
    	int a;
    	double c[15];
    }stu[105];
    int main(){
    	//std::ios::sync_with_stdio(false);
    	int x,y,z;
    	cin>>x>>y>>z;
    	for(int i=0;i<x;i++){
    		cin>>stu[i].na>>stu[i].a;
    		for(int j=0;j<y;j++){
    			double sum=0,aa;
    			for(int k=0;k<z;k++){
    				cin>>aa;
    				sum+=aa;
    			}
    			stu[i].c[j]=sum*1.0/z;
    		}
    	}
    	int t;
    	while(cin>>t&&t){
    		int flag=1;
    		for(int i=0;i<x;i++){
    			if(t==stu[i].a) {
    //				cout<<stu[i].na<<" ";
    				printf("%s ",stu[i].na);
    				for(int j=0;j<y;j++) {
    					printf("%.2lf",stu[i].c[j]);
    					if(j<y-1) printf(" ");
    				}
    				cout<<endl;
    				flag=0;
    				break;				
    			}
    		}
    		if(flag==1) cout<<"No such Student!"<<endl;
    	}
    	return 0;
    }
    `
    • 1
      @ 2021-10-30 11:30:28

      P1152 学生成绩 题解

      题意分析

      这个题的题意已经很清晰的给出学生信息的读取,本来想出一道二维数组嵌套结构体的,但是出完才发现可以用一维AC。

      这里直接讲最初的思路。我们创建一个学生的结构体,包含题干上给出的所有信息(其中的学科成绩信息其实可以直接用总分或者平均分来记录,所以二维转一维)。

      我们创建一个学生的数组,依次存放学信息。之后,用一个死循环来查询学生信息。

      可行代码

      #include <stdio.h>
      
      const int MAX = 100;
      const int SUBJECT = 100;
      
      struct Stu { 
          int id;
          char name[10];           // 名字
          int score[SUBJECT][MAX]; // 学科数/学期数
          double ave[SUBJECT];
      };
      
      int main() {
          int stuNum, subject, yearMax;
          scanf("%d%d%d", &stuNum, &subject, &yearMax);
          Stu stu[stuNum];
          // 输入学生信息
          for (int i = 0; i < stuNum; i++) {
              scanf(" %s%d", stu[i].name, &stu[i].id);
              for (int j = 0; j < subject; j++) {
                  double sum = 0;
                  for (int k = 0; k < yearMax; k++) {
                      scanf("%d", &stu[i].score[j][k]);
                      sum += stu[i].score[j][k];
                  }
                  stu[i].ave[j] = sum / yearMax;
              }
          }
          // 查询
          while (1) {
              int checkId;
              scanf("%d", &checkId);
              if (checkId == 0)
                  break;
              bool flag = false;
              for (int i = 0; i < stuNum; i++) {
                  if (stu[i].id == checkId) {
                      flag = true;
                      printf("%s ", stu[i].name);
                      for (int j = 0; j < subject; j++)
                          printf("%.2lf%c", stu[i].ave[j],
                                 j < subject - 1 ? ' ' : '\n');
                      break;
                  }
              }
              if (!flag) {
                  printf("No such Student!\n");
              }
          }
          return 0;
      }
      

      END 明明很简单,为什么不先做我的,eeeee

      • 0
        @ 2021-10-30 11:30:25

        P1152 学生成绩 题解

        题意分析

        这个题的题意已经很清晰的给出学生信息的读取,本来想出一道二维数组嵌套结构体的,但是出完才发现可以用一维AC。

        这里直接讲最初的思路。我们创建一个学生的结构体,包含题干上给出的所有信息(其中的学科成绩信息其实可以直接用总分或者平均分来记录,所以二维转一维)。

        我们创建一个学生的数组,依次存放学信息。之后,用一个死循环来查询学生信息。

        可行代码

        #include <stdio.h>
        
        const int MAX = 100;
        const int SUBJECT = 100;
        
        struct Stu { 
            int id;
            char name[10];           // 名字
            int score[SUBJECT][MAX]; // 学科数/学期数
            double ave[SUBJECT];
        };
        
        int main() {
            int stuNum, subject, yearMax;
            scanf("%d%d%d", &stuNum, &subject, &yearMax);
            Stu stu[stuNum];
            // 输入学生信息
            for (int i = 0; i < stuNum; i++) {
                scanf(" %s%d", stu[i].name, &stu[i].id);
                for (int j = 0; j < subject; j++) {
                    double sum = 0;
                    for (int k = 0; k < yearMax; k++) {
                        scanf("%d", &stu[i].score[j][k]);
                        sum += stu[i].score[j][k];
                    }
                    stu[i].ave[j] = sum / yearMax;
                }
            }
            // 查询
            while (1) {
                int checkId;
                scanf("%d", &checkId);
                if (checkId == 0)
                    break;
                bool flag = false;
                for (int i = 0; i < stuNum; i++) {
                    if (stu[i].id == checkId) {
                        flag = true;
                        printf("%s ", stu[i].name);
                        for (int j = 0; j < subject; j++)
                            printf("%.2lf%c", stu[i].ave[j],
                                   j < subject - 1 ? ' ' : '\n');
                        break;
                    }
                }
                if (!flag) {
                    printf("No such Student!\n");
                }
            }
            return 0;
        }
        

        END 明明很简单,为什么不先做我的,eeeee

        • 1

        Information

        ID
        148
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        8
        Tags
        # Submissions
        154
        Accepted
        18
        Uploaded By