2 solutions

  • 3
    @ 2024-5-23 13:52:01

    题意

    模拟操作学籍管理

    思路

    大水模拟题

    映射就是map

    代码

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    map<string,int>m;
    int si=0;
    int main()
    {
        int n;
        cin>>n;
        while(n--)
        {
            int op;
            cin>>op;
            if(op==1)//添加
            {
                string name;
                int sc;
                cin>>name>>sc;
                if(!m[name])
                    si++;
                m[name]=sc;
                cout<<"OK\n";
            }
            if(op==2)//获取
            {
                string name;
                cin>>name;
                if(m[name])
                {
                    cout<<m[name]<<"\n";
                }
                else
                {
                    cout<<"Not found\n";
                }
            }
            if(op==3)//删除
            {
                string name;
                cin>>name;
                if(m[name])
                {
                    m.erase(name);
                    cout<<"Deleted successfully\n";
                    si--;
                }
                else
                {
                    cout<<"Not found\n";
                }
            }
            if(op==4)//个数
            {
                cout<<si<<"\n";//这里注意,size是不行的(对于此代码)
            }
        }
        return 0;//完结散花
    }
    
    • 1
      @ 2024-5-28 13:41:35

      题意

      维护一个集合,提供增、改、查、删、计算总数的功能,具体格式见题目,元素为字符串与值的映射。

      思路

      在分析、提炼了一下题意,我抓住了映射这个字眼。

      下意识用map。

      而且我去想了一下,这个题目涉及以下计算:

      • 插入元素
      • 删除元素
      • 计算长度
      • 输出值
      • 改变值
      • 判断存在

      而这些在map里面,都不能说是能完成,还能方便地用完成。

      代码

      #include<iostream>
      #include<map>
      using namespace std;
      map<string,int>systems;//学籍管理系统  
      int main(){
      	void adds(string,int);//增
      	void finds(string);//查
      	void deletes(string);//删 
      	void summarys();
      	ios::sync_with_stdio(0); 
      	cin.tie(0);
      	cout.tie(0);//有些时候真的不是为了加速,
      			   //而是让输出整齐一点。
      	int n(0);//操作数量
      	cin>>n;
      	while(n--){//不再需要n了
      		string mode;//模式 
      		cin>>mode;
      		if(mode=="1"){
      			string name;//我把题目中的大写改成小写不介意吧,下同。 
      			int score(0);
      			cin>>name>>score;
      			adds(name,score);
      		}
      		if(mode=="2"||mode=="3"){//另外两个都是一个NAME参数,
      								//所以放一起比较方便。 
      			string name;
      			cin>>name;
      			if(mode=="2")
      				finds(name);
      			else
      				deletes(name);
      		}
      		if(mode=="4")
      			summarys();
      	}
      	return 0;//主函数写完!撒花!
      	//我是边写边加注释,所以现在真的有点不想写下面的感觉。 
      }
      void adds(string n,int s){//首字母表含义,具体意义看引用处。 
      	systems[n]=s;//简单的语句,没有就插入,有就修改。 
      	cout<<"OK\n";//真不知道这个OK有什么鸟用 
      }
      void finds(string n){
      	if(systems.find(n)==systems.end())//如果没有 
      		cout<<"Not found\n";
      	else//如果有 
      		cout<<systems[n]<<'\n';//输出结果 
      } 
      void deletes(string n){
      	if(systems.find(n)==systems.end())//直接复制上面的,改一下注释。 
      		cout<<"Not found\n";
      	else{
      		systems.erase(n);//删除
      		cout<<"Deleted successfully\n";
      	} 
      }
      void summarys(){
      	 cout<<systems.size()<<'\n';//无语,好简单。 
      }
      

      众所周知,我有一边写题目,一边加注释的习惯,所以有些注释纯属抒情,可以不用管。

      吐槽

      这道人机题没讲清楚,霸特,根据平时的经验和样例我们也能猜到,第一个数是个数。

      指正

      不要听le伟明luin a……啊!粤语用普通话拼音搞不出来好烦!反正就不要听他瞎掰,用size是可以的,他只是输出size时忘了加'\n',他是不是很le?

    • 1

    Information

    ID
    254
    Time
    1000ms
    Memory
    125MiB
    Difficulty
    7
    Tags
    (None)
    # Submissions
    19
    Accepted
    8
    Uploaded By