2.24打卡day18

100.纯粹合数

问题描述

明明的爸爸是一位数学家,明明受他爸爸的影响从小就喜欢数学,经常向他爸爸学习或请教数学问题。

一天,明明问他爸爸什么是合数,明明的爸爸回答说:“首先,合数都是大于1的整数,其次合数是除了1和其本身外,还能被至少一个其他自然数整除的数,例如‘4’这个数,它除了能被1和4整除外,还能被2整除,因此‘4’就是合数;但是‘3’就不是合数,因为3只能被1和3这两个数整除,因此‘3’不是合数。”

聪明的明明很快就理解了他爸爸的意思,于是又接着问他爸爸:“那什么又是纯粹合数呢?”明明的爸爸接着回答说:“一个合数,去掉最高位,剩下的数是0或仍是合数;再去掉剩下的数的最高位,剩下的数还是0或合数;这样反复,一直到最后剩下的一位数仍为0或合数;我们把这样的数称为纯粹合数。

例如‘100’这个数,它能被1、2、4、5、10、20、50、100整除,因此100是个合数,我们去掉它的最高位,剩下的数是0(其实剩下的应该是00,但是前置0对一个整数来说没有意义,因此前置0被舍去,就剩下个位数上的0),因此‘100’是一个纯粹合数。有趣的是,100是最小的一个三位纯粹合数。

再例如‘104’这个数,104能被1、2、8、13、26、52、104整除,所以104是个合数;我们去掉它的最高位后剩下4,4能被1、2、4整除,所以4也是合数,所以‘104’是一个纯粹合数。

但是‘101’就不是纯粹合数,因为‘101’只能被1和101这两个数整除。”

明明对他爸爸的回答很满意,于是自己动手从100开始寻找纯粹合数,他一共找到了100个纯粹合数,调皮的明明开始反过来考爸爸了,问他爸爸能否告诉他第2个大于等于100的纯粹合数是哪个?第3个大于等于100的纯粹合数又是哪个?……明明的爸爸被这个突如其来的问题给难住了,他无法立刻回答出来,于是请求你的帮助,帮助他回答明明的这个问题。

明明的问题可以归结为:根据一个正整数n,求出从100开始从小到大的第n个纯粹合数。

个人总结

迅速得到int数有几位的快捷方法:to_string(num).length()

判断素数或合数的判断条件的范围一定要写成for(int i=2;i<=n/2;i++)而不是for(int i=2;i<n/2;i++),要考虑到4的情况。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

bool isHeShu(int n){
    for(int i=2;i<=n/2;i++){
        if(n%i==0)
            return true;
    }
    return false;
}

bool isChunCui(int n){
    while(n>0){
        if(!isHeShu(n))
            return false;
        int bei=n/pow(10,to_string(n).length()-1);
        n-=bei*pow(10,to_string(n).length()-1);
    }
    return true;
}

int main()
{
    vector<int> heshu;
    int x=100;
    while(heshu.size()<100){
        if(isChunCui(x)){
            heshu.push_back(x);
        }
        x++;
    }
    int n;
    while(cin>>n){
        cout<<heshu[n-1]<<endl;
    }
}

101.找出质数

问题描述

明明学习数学已经有一段时间了。一次老师在课上讲了什么叫质数。质数就是大于等于2且只能被1和其本身整除的整数。明明觉得这很简单,以为这很容易掌握,于是就不多做练习。明的爸爸发现了这个问题,他想让明明多做练习,把质数这个知识点掌握牢固。但是,他也知道只是求质数会很无聊,明明一定不愿意多做。于是他想出了一个游戏,这个游戏叫“找出质数”,就是给明明一个数字串,要叫明明在这个数字串中找出一个最大的子串,要求这个子串是一个质数。 但是由于明明还太小,他的计算能力有限,因此明明的爸爸认为,找出长度大于4个字符的质数对明明来说太困难了。于是他降低了要求,只需找出小于10,000的最长的质数子串即可。 例如:有一个数字串为17,最大的子串就应该是17,因为1不是质数,7虽然是质数,但是7的长度只有1,17也是质数,它的长度为2,因此最大的子串就是17。 明明觉得这个游戏很有趣,就高兴地做了起来,明明的爸爸出了很多个数字串,由于数字串太多,所以明明爸爸自己找出最长的子串也要花很多的时间,于是明明的爸爸想让你帮他一个忙,写一个程序,找出数字串中最长的质数子串。

明明爸爸的问题可以归结为:输入一串数字,找出其中最长的不超过4个字符的质数子串。若有多个答案,则找出其中数值最大的一个。

个人总结

s.substr(0,1)返回子串,第一个参数是起始位置,第二个参数是从起始位置开始的偏移量

stoi(str)快速string 转 int

*maxelement(s.begin(),s.end())找s.begin和s.end之间最大值的迭代器,使用*取得该迭代器对应的数

#include <iostream>
#include <vector>
#include <string>

using namespace std;

bool isPrime(int n){
    if(n==0 || n==1)
        return false;
    for(int i=2;i<=n/2;i++){
        if(n%i==0)
            return false;
    }
    return true;
}



int main()
{
    string s;
    while(cin>>s){
        int len=s.size()<4?s.size():4;
        vector<int> subs_prime;
        //从最大长度开始找素数子串,如果最大长度找到至少一个素数子串,那么subs_prime不为空就跳出循环
        while(subs_prime.empty()){
            for(int i=0;i+len<=s.size();i++){
                int subNum=stoi(s.substr(i,len));//子串对应的数字
                if(isPrime(subNum)){
                    subs_prime.push_back(subNum);
                }
            }
            len--;//下一次查找的子串长度-1
        }
        cout<<*max_element(subs_prime.begin(),subs_prime.end())<<endl;
    }
}

102.翻译字符串

问题描述

在现代战争中,情报战越来越显示出它的重要性,敌我双方都想方设法得到对方的情报,然后一举歼灭对方。然而,随着加密技术的出现,对情报进行加密变得越来越频繁,想破解敌方的情报也越来越难。明明是一名富有经验的情报工作人员,他的主要任务就是破解敌方的情报,从而得到对己方有利的信息。在一次破解情报任务中,明明再次成功地破解了敌方的情报。明明的破解方法如下:一串以‘@’为结束标志的字符串,从左至右对其进行翻译,若字符串中当前字符是整数n(0≤n≤9),则表示将后一个字符重复n+1次,不论后一个字符是否为数字,且后一个字符无需再次翻译;若当前字符非数字,则表示自己,无需翻译,直接输出即可。最后,输出翻译完的字符串。

例如字符串为:2d352d@,因为第一个字符为数字2,则将后一个字符d输出3次,而d则不需再翻译,然后翻译3,3也是一个数字,则将后一个字符5输出4次,而5则不需再翻译,然后翻译2,2也是一个数字,将后一个字符d输出3次,而d则不需再翻译,最后一个字符为@,表示自己,直接输出即可,最后的输出为:ddd 555 5dd d@;(注:在翻译时,‘@’当作字符处理。) 这样翻译字符串的方法虽然简单,但是由于敌方的文件巨大,仅仅靠手工翻译是很难在短时间内完成的。于是明明就求助于你这位程序专家,按照明明提供的破译方法写一个程序,帮助明明快速把敌方文件翻译完成。

明明的问题可以归结为:按照文中提供的破译情报的方法,对字符串进行翻译,然后输出翻译后的字符串。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    string s;
    while(cin>>s){
        bool flag=false;//flag为true时,前一个输的是数字,对于本次读取的字符不作翻译仅输出
        int cnt=0;
        int len=0;
        for(int i=0;i<s.size();i++){
            if(flag){
                for(int j=0;j<cnt;j++){
                    if(len%3==0 && len!=0)
                        cout<<" ";
                    cout<<s[i];
                    len++;
                }
                flag=false;
            }
            else{
                if(s[i]>='0' && s[i]<='9'){
                    flag=true;
                    cnt=s[i]-'0'+1;
                }
                else{
                    if(len%3==0 && len!=0)
                        cout<<" ";
                    cout<<s[i];
                    len++;
                }

            }
        }
        cout<<endl;
    }

}

103.分割数字并排序

问题描述

输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;

int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        vector<vector<int>> nums;
        nums.push_back({});
        for(int j=0;j<s.size();j++){
            if(s[j]=='5'){
                nums.push_back({});
            }
            else{
                nums.back().push_back(s[j]-'0');
            }
        }

        vector<int> ans;
        for(int j=0;j<nums.size();j++){
            int current_num=0;
            for(int k=0;k<nums[j].size();k++){
                current_num+=nums[j][k]*pow(10,nums[j].size()-k-1);
            }
            if(!nums[j].empty())
                ans.push_back(current_num);
        }
        sort(ans.begin(),ans.end());
        for(int j=0;j<ans.size();j++){
            if(j!=0)
                cout<<" ";
            cout<<ans[j];
        }
        cout<<endl;
    }

}

104.A == B ?

问题描述

给你两个非负实数A和B,如果A等于B,输出 "YES", 否则输出"NO"

输入范例

2
100.0 00100
0100.1234576 00000000100.123457

个人总结

使用#include<sstream> 的stringstream ss(line)再ss>>str实现多行数据中每行数据以空格间隔,此类输入的接收。

另外别忘记cin>>str和后续的getline(cin,s)之间需要有cin.ignore()

除了stoi,还有stof,stod将字符串转化浮点数的现成方法,都可以自动去除多余的0

#include <iostream>
#include <vector>
#include <string>
#include <sstream>

using namespace std;

int main(){
    int n;
    cin>>n;
    cin.ignore();
    for(int i=0;i<n;i++){
        string line;
        getline(cin,line);
        stringstream ss(line);
        string s;
        vector<string> a;
        while(ss>>s){
            a.push_back(s);
        }
        if(stod(a[0])==stod(a[1]))
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
}

计算机英语刘艺第五版unit12 英语翻译

        GPS由美国空军于1973年发布。类似的定位系统也在欧盟,俄罗斯和中国诞生。1994年,一款民用级弱化版的GPS应用发布,为用户提供可靠的定位,导航和时间服务。对于任何持有GPS接收器的用户,GPS系统可以随时随地在任何天气情况下为其提供准确的定位和时间信息,而且不限制用户数量。

        协同(Synergistic)技术起到了支持作用。举个例子,生物识别技术(biometrics)可以广泛用于客制化(personalize)的人,机,物之间的交互。人工智能,计算机视觉,机器人学和telepresense(远程呈现)可以使我们未来的生活更加自动化。

        作为一个新兴技术,物联网技术将会越来越成熟且越来越复杂。图12c-1展现了主要的技术进步和可能得益于物联网技术的关键应用。比如,相较于以前,现在的供应链(supply chains)得到了更好的技术支持。垂直领域市场的应用也许会代表引领下一轮技术进步的浪潮。普遍(ubiquitous)定位将会在2020年成为现实。除此之外,实体的物联网也会在全球范围内建立。这些技术革新将会深刻地更新人类的能力,社会效益(societal outcome),国家生产力和生活质量

AI翻译对比

全球定位系统于1973年由美国空军研发。此后,欧盟、俄罗斯和中国也相继开展了类似系统的开发工作。自1994年起,一种精度调整后的GPS版本开始面向民用领域开放,用于提供可靠的定位、导航和授时服务。任何配备GPS接收器的用户,无论在全球任何地点,无论昼夜或天气状况如何,都能获得精准的位置与时间信息。

协同技术发挥着重要的支撑作用。例如,生物识别技术可广泛应用于人-机-物交互的个性化定制。人工智能、计算机视觉、机器人技术和远程呈现技术,将推动未来生活实现更高程度的自动化。

作为一项新兴技术,物联网将日趋成熟与精进。图12C-1展示了可能受益于物联网的主要技术进展与关键应用领域。例如,供应链现正获得较以往更完善的技术支持。垂直市场应用或将引领下一波技术革新浪潮。至2020年前后,泛在定位预计将成为现实。此后,全球规模的实体物联网有望建成。这些技术突破将显著提升人类能力、社会效益、国家生产力及生活质量。

计算机英语单词扇贝打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值