zoukankan      html  css  js  c++  java
  • c++刷题(39/100)笔试题3

    题目1:

    现在你需要用一台奇怪的打字机书写一封书信。信的每行只能容纳宽度为100的字符,也就是说如果写下某个字符会导致行宽超过100,那么就要另起一行书写
    信的内容由a-z的26个小写字母构成,而每个字母的宽度均会事先约定。例如字符宽度约定为[1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],那么就代表'a'到'd'四个字母的宽度分别是1,2,3,4,而'e'到'z'的宽度均为5
    那么按照上述规则将给定内容S书写成一封信后,这封信共有几行?最后一行宽度是多少?
    思路:比较简单,开一个26的数组记录hash,然后会错的地方就是如果sum>100的时候才算新的一行
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string s;
        int A[26];
        for(int i=0;i<26;i++)
            cin>>A[i];
        cin>>s;
    
        int count=1,length=0,l;
        for(int i=0;i<s.length();i++)
        {
            l=A[s[i]-'a'];
            if(length+l>100)
            {
                length=l;
                count++;
            }
            else
            {
                length+=l;
            }    
        }
        cout<<count<<" "<<length<<endl;
    
        return 0;
    }

    题目2:

    小明是幼儿园的一名老师。某天幼儿园园长给小朋友们每人发一颗糖果,小朋友们拿到后发现有一些同学拿到的糖果颜色和自己相同,有一些同学糖果颜色和自己不同。
    假定每个小朋友只知道有多少同学和自己拿到了相同颜色的糖果。
    上课后,有一部分小朋友兴奋的把这一结果告诉小明老师,并让小明老师猜一猜,最少有多少同学拿到了糖果。
    例如有三个小朋友告诉小明老师这一结果如下:
    其中第一个小朋友发现有1人和自己糖果颜色一样,第二个小朋友也发现有1人和自己糖果颜色一样,第三个小朋友发现有3人和自己糖果颜色一样。
    第一二个小朋友可互相认为对方和自己颜色相同,比如红色;
    第三个小朋友不可能再为红色(否则第一二个小朋友会发现有2人和自己糖果颜色相同),假设他拿到的为蓝色糖果,那么至少还有另外3位同学拿到蓝色的糖果,最终至少有6位小朋友拿到了糖果。
    现在请你帮助小明老师解答下这个谜题。
    思路:这道题方法就是当第一个人说有n个人和自己糖果颜色相同时,那么hash表中就记录m[n] = n,总人数+n+1(算上自己),此时再有人说有n个人和自己糖果颜色相同时就从hash表里减,总人数不增加,到0时又重新加总人数
    这道题的坑点在于输入要自己处理,是带空格的一行字符串,然后要把数字抽出来
    #include<iostream>
    #include<string>
    #include<map>
    using namespace std ;
    int main(){
        string str ;
        getline(cin,str) ;
        map<int,int> m ;
        int cnt = 0 ;
        for(int i=0;i<str.length();i++){
            string temp = "" ;
            if(str[i]==' ') continue ;
            temp+=str[i] ;
            while(i+1<str.length()&&str[i+1]!=' '){
                i++ ;
                temp+=str[i] ;
            }
            int num = stoi(temp) ;
            if(m[num]){
                m[num]-- ;
            }else{
                m[num] = num ;
                cnt+=(num+1) ;
            }
        }
        cout << cnt << endl ;
    }
  • 相关阅读:
    DB2—alter追加/删除/重置column操作
    piwik网站访问统计系统
    二、ELKStack集群架构设计
    vnstat 查看服务器带宽统计命令
    JavaScript实现瀑布流
    ansible安装文档
    tornado框架介绍
    运维工程师主要工作是做什么?
    vmware workstation无法打开内核设备问题处理办法
    Python开发之AJAX全套
  • 原文地址:https://www.cnblogs.com/maskmtj/p/9414379.html
Copyright © 2011-2022 走看看