当前位置: 首页 > article >正文

每日小题打卡


目录

幂次方

手机键盘 

简单排序 

校庆 

性感素数 


幂次方

题目描述 

对任意正整数 N,计算 X^Nmod233333 的值。

输入格式

共一行,两个整数 X 和 N。

输出格式

共一行,一个整数,表示 X^Nmod233333 的值。

数据范围

1≤X,N≤10^9

输入样例:

2 5

输出样例:

32

源代码 

快速幂嘛 

#include <iostream>
using namespace std;
typedef long long ll;
ll fast(ll a,ll b,ll p)
{
    if(b == 0)return 1 % p;
    ll ans = 1;
    while(b > 0)
    {
        if(b & 1)ans = ans * a % p;
        b >>= 1;
        a = a * a % p;
    }
    return ans;
}
int main()
{
    int x,n;
    cin >> x >> n;
    cout << fast(x,n,233333);
    return 0;
}

手机键盘 

题目描述 

请你计算按照手机键盘(9 键输入法)输入字母的方式,键入给定字符串(由小写字母构成)所花费的时间。

具体键入规则和花费时间如下描述:

对于同一键上的字符,例如 a,b,c 都在 “1” 键上,输入 a 只需要按一次,输入 c 需要连续按三次。

如果连续两个字符不在同一个按键上,则可直接按,如:ad 需要按两下,kz 需要按 6 下。

如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如 ac,在按了 a 之后,需要等一会儿才能按 c。

现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。

输入格式

输入包含多组测试数据。

每组数据占一行,包含一个由小写字母构成的字符串。

输出格式

对于每组输入,输出一行结果表示键入给定字符串所需要花费的时间。

数据范围

每个输入最多包含 100 组测试数据。
所有字符串的长度都不超过 100。

输入样例:

bob
www

输出样例:

7
7

源代码 

刚开始没动脑子直接暴力

#include <iostream>
using namespace std;
int main()
{
    string s;
    while(cin >> s)
    {
        int ans = 0;
        for(int i = 0;i < s.size();i ++ )
        {
            if(i > 0)
            {
                if((s[i] == 'a'||s[i] == 'b'||s[i] == 'c')&&(s[i - 1] >= 'a' && s[i - 1] <= 'c'))ans += 2;
                if((s[i] == 'd'||s[i] == 'e'||s[i] == 'f')&&(s[i - 1] >= 'd' && s[i - 1] <= 'f'))ans += 2;
                if((s[i] == 'g'||s[i] == 'h'||s[i] == 'i')&&(s[i - 1] >= 'g' && s[i - 1] <= 'i'))ans += 2;
                if((s[i] == 'j'||s[i] == 'k'||s[i] == 'l')&&(s[i - 1] >= 'j' && s[i - 1] <= 'l'))ans += 2;
                if((s[i] == 'm'||s[i] == 'n'||s[i] == 'o')&&(s[i - 1] >= 'm' && s[i - 1] <= 'o'))ans += 2;
                if((s[i] == 't'||s[i] == 'u'||s[i] == 'v')&&(s[i - 1] >= 't' && s[i - 1] <= 'v'))ans += 2;
                if((s[i] == 'p'||s[i] == 'q'||s[i] == 'r'||s[i] == 's')&&(s[i - 1] >= 'p' && s[i - 1] <= 's'))ans += 2;
                if((s[i] == 'w'||s[i] == 'x'||s[i] == 'y'||s[i] == 'z')&&(s[i - 1] >= 'w' && s[i - 1] <= 'z'))ans += 2;
            }
            if(s[i] == 'a'||s[i] == 'd'||s[i] == 'g'||s[i] == 'j'||s[i] == 'm'||s[i] == 'p'||s[i] == 't'||s[i] == 'w')ans += 1;
            else if(s[i] == 'b'||s[i] == 'e'||s[i] == 'h'||s[i] == 'k'||s[i] == 'n'||s[i] == 'q'||s[i] == 'u'||s[i] == 'x')ans += 2;
            else if(s[i] == 'c'||s[i] == 'f'||s[i] == 'i'||s[i] == 'l'||s[i] == 'o'||s[i] == 'r'||s[i] == 'v'||s[i] == 'y')ans += 3;
            else if(s[i] == 's'||s[i] == 'z')ans += 4;
        }
        cout << ans << endl;
    }
    return 0;
}

动了点脑子优化

#include <iostream>
using namespace std;
int a[26] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int b[26] = {1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};
int main()
{
    string s;
    while(cin >> s)
    {
        int ans = 0;
        for(int i = 0;i < s.size();i ++ )
        {
            if(i == 0)ans += a[s[i] - 'a'];
            else
            {
                if(b[s[i] - 'a'] == b[s[i - 1] - 'a'])ans += 2;
                ans += a[s[i] - 'a'];
            }
        }
        cout << ans << endl;
    }
    return 0;
}

简单排序 

题目描述

给定一个包含 n 个整数的数组,请你删除数组中的重复元素并将数组从小到大排序后输出。

输入格式

第一行包含一个整数 n。

第二行包含 n 个不超过 1000 的正整数。

输出格式

输出去重和排序完毕后的数组。

数据范围

1≤n≤1000

输入样例:

6
8 8 7 3 7 7

输出样例:

3 7 8

源代码

vector容器排序

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> A;
int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i ++ )
    {
        int num;
        cin >> num;
        A.push_back(num);
    }
    sort(A.begin(),A.end());
    A.erase(unique(A.begin(),A.end()),A.end());
    for(int i = 0;i < A.size();i ++ )cout << A[i] << ' ';
    return 0;
}

校庆 

题目描述

2019 年浙江大学将要庆祝成立 122 周年。

为了准备校庆,校友会收集了所有校友的身份证号。

现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。

输入格式

输入在第一行给出正整数 N。

随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母 X 组成的字符串)。题目保证身份证号不重复。

随后给出前来参加校庆的所有人士的信息:

首先是一个正整数 M。

随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。

输出格式

首先在第一行输出参加校庆的校友的人数。

然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7−14 位给出的是 yyyymmdd 格式的生日。

如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。

数据范围

1≤N,M≤10^5

输入样例:

5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042

输出样例:

3
150702193604190912

源代码

利用哈希表进行处理

A.count(s)在容器之中查找名为s的元素

A.insert(s)在容器之中插入名为s的元素

a.empty()和a.substr(idx,lenth)分别是

判断a字符串是否为空和截取字符串的下标从idx开始长度为lenth的字串 

特别注意文字游戏:

记得在来访者之中没有校友的话输出来访者之中年龄最大的身份证号

在来访者之中有校友的话输出参加校庆的校友当中年龄最大的身份证号 

#include <iostream>
#include <unordered_set>
#include <algorithm>
using namespace std;
unordered_set<string> A;
int ans = 0;
int main()
{
    int n;
    cin >> n;
    while(n -- )
    {
        string s;
        cin >> s;
       	A.insert(s);
    }
    int m;
    cin >> m;
    string a,b;
	while(m -- )
    {
		string s;
		cin >> s;
		if(A.count(s))
		{
		    ans ++ ;
		    if(a.empty() || a.substr(6,8) > s.substr(6,8))a = s;
		}
		if(b.empty() || b.substr(6,8) > s.substr(6,8))b = s;
	}
	cout << ans << endl;
	if(ans)cout << a;
	else cout << b;
	return 0;
}

性感素数 

题目描述

“性感素数”是指形如 (p,p+6) 这样的一对素数。

之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。

现给定一个整数,请你判断其是否为一个性感素数。

输入格式

输入在一行中给出一个正整数 N。

输出格式

若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。

若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。

数据范围

1≤N≤10^8

输入样例1:

47

输出样例1:

Yes
41

输入样例2:

21

输出样例2:

No
23

源代码

首判N是否为性感素数

若其是则必定有解,优先输出其左边较小的解,若没有的话则输出右边较大的解

若是无解的话则开始从N往后查找最小的性感素数而不是素数 

#include <iostream>
#include <cmath>
using namespace std;
bool judge(int n)
{
    if(n == 0||n == 1||n < 0)return 0;
    for(int i = 2;i <= sqrt(n);i ++ )
    {
        if(n % i == 0)return false;
    }
    return true;
}
bool sex(int n)
{
    if(judge(n) && judge(n + 6) || judge(n) && judge(n - 6))return true;
    else return false;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    if(sex(n))
    {
        cout << "Yes" << endl;
        if(judge(n - 6))cout << n - 6 << endl;
        else if(judge(n + 6))cout << n + 6 << endl;
    }
    else
    {
        cout << "No" << endl;
        for(int i = n;;i ++ )
        {
            if(sex(i))
            {
                cout << i << endl;
                break;
            }
        }
    }
    return 0;
}


http://www.kler.cn/a/454454.html

相关文章:

  • 群落生态学研究进展▌Hmsc包对于群落生态学假说的解读、Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用
  • 【Linux 系统负载详情解析】
  • 单例模式懒汉式、饿汉式(线程安全)
  • IPD管理体系框架架应用实践
  • 网络智能服务
  • 【vue2父组件调用子组件方法之slot的使用】
  • AI多模态技术介绍:理解多模态大语言模型的原理
  • 华为OD E卷(100分)38-数组拼接
  • 基于Android实现的2048小游戏
  • Effective C++ 条款 12:复制对象时勿忘其每一个成分
  • .NET 8.0 项目升级到 .NET 9.0
  • 利用Java爬虫速卖通按关键字搜索AliExpress商品
  • 流量主微信小程序工具类去水印
  • 基于大涡模拟与中尺度数值天气模式的精细化风场模拟
  • 云渲染,Enscape、D5、Lumion渲染提速教程
  • Cadence学习笔记 11 PCB中器件放置
  • 嵌入式学习-QT-Day03
  • VB.NET在 Excel 二次开发中的全面应用
  • NLP 中文拼写检测开源-03-hunspell 拼写纠正算法入门介绍 CSC
  • python实现根据搜索关键词爬取某宝商品信息
  • tcp 的重传,流量控制,拥塞控制
  • MySQL:顿悟‌了,添加索引时竟然不锁表?
  • 【Java 数据结构 】反转一个单链表
  • Visual Studio2019基础使用指南
  • 每天40分玩转Django:实操多语言博客
  • Day53 图论part04