PTA 1058 选择题(String )C++

这道题我以运用string 为主 ,因为string 可以直接进行+=,和== 的操作。还是代码如下,再听我多说两句。

#include <bits/stdc++.h>
using namespace std;
struct node{
    
    
 int con,num,rig;
 string ans;
 int times;
}a[110];
int main()
{
    
    
 string q,w;
 int n,m,j,ko,sum,i,t;
 scanf("%d%d",&n,&m);
 for(i=0;i<m;++i){
    
    
  scanf("%d%d%d",&a[i].con,&a[i].num,&a[i].rig);
  a[i].times=0;
  for(j=0;j<a[i].rig;++j){
    
    
   cin>>q;
   w+=q;
  }
  a[i].ans=w;
  w.clear();
 }
 for(i=0;i<n;++i){
    
    
  sum=0;
  for(j=0;j<m;++j){
    
    
        cin>>q;
        ko=q[1]-'0';
  if(ko!=a[j].rig) {
    
    a[j].times+=1;
      for(t=0;t<ko;++t) cin>>q;
   }
  else {
    
    
   for(t=0;t<ko;++t){
    
    
    cin>>q;
    w+=q;
   }
   w.erase(w.begin()+ko);
   if(w==a[j].ans) sum+=a[j].con;
   else a[j].times+=1;
   w.clear();
      }
  }
     printf("%d\n",sum);
 }
 int max=0;
 for(i=0;i<m;++i){
    
    
  if(a[i].times>max) max=a[i].times;
 }
 if(max==0) printf("Too simple");
 else {
    
    
  printf("%d",max);
  for(i=0;i<m;++i){
    
    
   if(a[i].times==max) printf(" %d",i+1);
  }
 }
 printf("\n");
 return 0;
}

解释之不读题了

主要矛盾

题目在输入数据时,每一题的正确答案好解决,比较棘手的是每个学生答题时的 括号 () 。看了别人的,发现有些神级人物们用

scanf("(%d",&n);
scanf(" %c",&sp);

来读入学生回答的个数和答案选项。之后来处理空格 和 换行

我就比较直接了,只要读入答案选项就直接用一个string来表示

for(j=0;j<a[i].rig;++j){
    
    //首先读入正确答案  w是正确的答案
   cin>>q;//q是每次读入的选项,因为string遇空格就停止 所以q就是一个单字符 
   w+=q;//将q依次放在w里
  }
  a[i].ans=w;
  w.clear();//记住 每次重新读入时需要清空w 不然下一题的答案就可能是abb
 }

下面是录入学生选项

for(j=0;j<m;++j){
    
    
        cin>>q;//直接将(n 读进来 n是选择个数
        ko=q[1]-'0';//ko是选择个数 将n赋给ko
  if(ko!=a[j].rig) {
    
    a[j].times+=1;//个数不对时,直接错误次数加一
      for(t=0;t<ko;++t) cin>>q;//将回答读入 无需存储,反正是错的
   }
  else {
    
    //个数正确时
   for(t=0;t<ko;++t){
    
    
    cin>>q;
    w+=q;//和读入答案一样
   }//注意 最后一个选项和)连在了一起 
   w.erase(w.begin()+ko);//这里需要删除最后的) 因为之前w是ab)
   if(w==a[j].ans) sum+=a[j].con;//然后 直接比较
   else a[j].times+=1;
   w.clear();//清空 再来
      }
  }

由于用cin来读入string 所以时间肯定是比大神们要长不少,由于题目的数据较少,我在最后一个测试点也过了 。自己比了一下 时间几乎是大神们的两倍了。

本题好似没有次要矛盾。

wish you all the best.

Guess you like

Origin blog.csdn.net/M1170780140/article/details/104277946