算法竞赛入门【码蹄集进阶塔335题】(MT2226

您所在的位置:网站首页 10000000大写是多少 算法竞赛入门【码蹄集进阶塔335题】(MT2226

算法竞赛入门【码蹄集进阶塔335题】(MT2226

2023-04-11 08:06| 来源: 网络整理| 查看: 265

算法竞赛入门【码蹄集进阶塔335题】(MT2226-2250)

文章目录 算法竞赛入门【码蹄集进阶塔335题】(MT2226-2250) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? 目录 1. MT2226 36进制2 2. MT2227 36进制3 3. MT2228 36进制4 4. MT2229 excel的烦恼 5. MT2230 单条件和 6. MT2231 lowbit 7. MT2232 位运算 8. MT2233 三进制计算机1 9. MT2234 三进制计算机2 10. MT2235 整数大小比较 11. MT2236 升级版斐波那契数列 12. MT2237 2的n次幂 13. MT2238 大斐列 14. MT2239 个数统计 15. MT2240 个数统计2 16. MT2241 幸运数 17. MT2242 num++ 18. MT2243 A+B problem 19. MT2244 A-B problem 20. MT2245 求圆周率 21. MT2246 派的n位 22. MT2247 进行一个幂的运算 23. MT2248 快速幂 24. MT2249 幂和 25. MT2250 Good Num的数量 结语

前言

在这里插入图片描述

为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 > 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

在这里插入图片描述

为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。 在这里插入图片描述

目录 1. MT2226 36进制2

(1)题目描述 36进制,是数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-Z组成。与10进制的对应关系是:O-9对应O-9;A-Z对应10-35。

本题中,请你创建一个36进制类,统一使用大写字母,使其能够进行== ,l=, > ,>=,=y) elif op=="": print(x>y) elif op=="!=": print(x!=y) if __name__ == '__main__': main(); 2. MT2227 36进制3

(1)题目描述

36进制,是数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-Z组成。与10进制的对应关系是:0-9对应O-9;A-Z对应10-35。

本题中,请你创建一个36进制类,我们要求其能进行加法与减法操作,统一使用大写字母。其中初始36进制数为0,请你输出进行了n次操作后这个数的36进制值。

格式

输入格式: 第一行输入一个十进制整数n,n表示操作组数。 接下来n行,每行输入一个36进制整数,若该数前面无符号,则为加法;若该数前面有个负号,则为减法。 . 输出格式: 输出进行了n项操作后,36进制数的值。

样例1

输入: 7 123 -ABC 456 0 -FZ 8FZ QWERTY . 输出: QWEUPV

备注:

保证:对于100%的数据:1 string s; cin>>s; int r,c; r=s.find("R"); c=s.find("C"); if(r==0&&c!=0&&c!=-1&&s[c-1]>='0'&&s[c-1] st.push((char)((y-1)%26+'A')); y--; y/=26; } while(!st.empty()){ cout if(s[i]='0'){ mid=i; break; } } string col=s.substr(0,mid); int x,y; x=stoi(s.substr(mid)); y=0; for(int i=0;i int n; int i=0,j=0; scanf("%d",&n); unsigned int v,ans=0; for(i=0;i printf("%d\n",A[0]); return 0; } for(j=0;j ans |= (1j) & 1; for(i=1;i v = 0; }else{ v = 1; } } if(v){ ans |= (1 int num = 0; scanf("%d", &num); printf("%d\n", num&(-num)); } return 0; } 7. MT2232 位运算

(1)题目描述

在这里插入图片描述

格式

输入格式: 第一行一个整数n。 第二行n个整数a[i]。 . 输出格式: 输出一行一个整数表示答案,即操作后所有数的平方和的最大值。

样例1

输入: 2 2 4 . 输出: 28

备注:

在这里插入图片描述

(2)参考代码

import time from typing import List, Tuple from collections import deque, Counter from queue import PriorityQueue import math from functools import lru_cache #from sortedcontainers import SortedDict, SortedSet import random import copy import sys sys.setrecursionlimit(999999999) def main(): n = int(input()) arr = list(map(int, input().split())) cnt = [0] * 32 for v in arr: for b in range(32): if v & (1 scanf("%s", s); int len = strlen(s); long long pow = 1; long long ans = 0; for (int i = len-1; i >= 0; i--) { if (s[i] == '-') ans -= pow; else if (s[i] == '1') ans += pow; pow *= 3; } printf("%lld\n", ans); } return 0; } 9. MT2234 三进制计算机2

(1)题目描述 三进制计算机,是以三进法数字系统为基础而发展的计算机。在光子计算机研究领域也有涉及。莫斯科国立大学研究员设计了第一批三进制计算机CeTyHb和CeTyHb70。

三进制代码的一个特点是对称,即相反数的一致性,因此它就和二进制代码不同,不存在无符号数的概念。这样,三进制计算机的架构也要简单、稳定、经济得多。其指令系统也更便于阅读,而且非常高效。

在一般情况下,命题不一定为真或假,还可能为未知。在三进制逻辑学中,符号1代表真;符号-1代表假;符号0代表未知。这种逻辑表达方式更符合计算机在人工智能方面的发展趋势,它为计算机的模糊运算和自主学习提供了可能。

在本题中,请你将输入的十进制数转换为对应的对称三进制数。对称三进制数不是用0/1/2表示,比较特殊,是用1/0/-1表示,故名对称,其中-1请用符号′-‘表示,而1和0直接表示即可。

格式

输入格式: 第一行输入一个整数n,表示数据组数。 接下来n行,每行输入一个十进制整数。 . 输出格式: 对于第2~n+1行输入的每一个十进制整数,分别输出其三进制形式。

样例1

输入: 8 -3 -2 -1 0 1 2 3 5 . 输出: -0 -1 0 1 1- 10 1–

(2)参考代码

#include using namespace std; int main() { int n, len; scanf("%d", &n); while (n--) { int num, len = 0; char str[256]; bool isNeg = false; scanf("%d", &num); if (num int rem = num % 3; num /= 3; // 余数为2,本位变为‘-’ if (rem == 2) { str[len] = '-'; // 高一位加上1 num++; } else if (rem == 0) str[len] = '0'; else if (rem == 1) str[len] = '1'; len++; } while (num > 0); if (isNeg) // 负数转换 for (int i = 0; i = 0; i--) putchar(str[i]); putchar('\n'); } return 0; } 10. MT2235 整数大小比较

(1)题目描述 给出两个正整数,判断他们的大小。

格式

输入格式: 两个正整数 . 输出格式: 若前者大,输出> 若后者大,输出

备注:

保证所有数在2的100次方以内

(2)参考代码

def main(): #code here x, y = [int(i) for i in input().split()] if x > y: print(">") elif x res*=2; } printf("%.00f",res); return 0; } 13. MT2238 大斐列

(1)题目描述 计算斐波那契数列第n项。 在这里插入图片描述

格式

输入格式: 一个整数n . 输出格式: 一个整数F[n]

样例1

输入: 6 . 输出: 8

(2)参考代码

#include using namespace std; const int N=5e3+100; int f[N][N]; void add(int a,int b,int c){ int carry=0; for(int i=1;i carry=1; f[c][i]-=10; } } } int main( ) { int n; cin>>n; f[1][1]=f[2][1]=1; for(int i=3;i cout for(int j = 0 ; j int n, m; cin>>n>>m; a[0] = 1; //初始化 Mul(n); //用string保存答案 string str = "", s; char tmp[N]; sprintf(tmp, "%d" , a[length - 1]); //利用sprintf将数字转为字符串,方便统计 s = tmp, str += s; for(int i = length - 2; i >= 0 ; i--){ sprintf(tmp, "%05d" , a[i]); //利用sprintf将数字转为字符串,方便统计 s = tmp, str += s; } //计算结果 int sum = 0, len = str.length(); for(int i = 0 ; i int static a[10000],i,j,l=0,s,res; string str=""; a[0]=1; for(int i=1;i s=s+a[j]*i; a[j]=s%10; s/=10; } while(s){ l++; a[l]=s%10; s/=10; } } for(int i=l;i>=0;i--){ str+=a[i]+'0'; } int begin=-1; while((begin=str.find(b,begin+1))!=string::npos) res++; return res; } int main( ) { int n,m; string b; cin >>n>>b; m = jie(n,b); cout s=0; for(int j=0;j l++; a[l]=s%10; s/=10; } } for(int i=l;i>=0;i--){ if(a[i]==7) res++; } return res; } int main( ) { int n,res; cin >>n; res = jie(n); cout for (int i = s.size() - 1; i >= 0; i--) { A.push_back(s[i] - '0'); } } Num(vector &A) { this->A = A; } Num operator+(const Num &b) { vector C; vector A = this->getVector(); vector B = b.getVector(); int t = 0; for (int i = 0; i return A; } void print() { for (int i = A.size() - 1; i >= 0; i--) { printf("%d", A[i]); } } private: vector A; }; int main() { string a, b; vector A, B; cin >> a >> b; Num numA(a); Num numB(b); Num numC = numA + numB; numC.print(); return 0; } 19. MT2244 A-B problem

(1)题目描述 计算A-B(A,B≤1010000)要求使用struct 或class并重载运算符。

格式

输入格式: 两行每行一个整数A,B . 输出格式: 一个整数A-B

样例1

输入: 2 1 . 输出: 1

(2)参考代码

#include #include using namespace std; int a[100000001],b[10000001],c[10000001],lena,lenb,lenc,i; char n[100001],n1[100001],n2[100001]; int main() { scanf("%s",n1); scanf("%s",n2); if(strlen(n1) if(a[i] int i = 1; double sum = 0; int a, b; while(1) { a = 2 * i + 1; b = i; sum = sum + log10(a / b); i++; if (sum > n + 1) { return i; } } } int main() { // 定义我们需要多少个结点 #define NODE_NUM 1050 list num(NODE_NUM, 0);// 存放R(n) list sum(NODE_NUM, 0);// 存放Sum(n) int print;// 所需精度 cin >> print; int cnt = count(print);// 所需迭代次数 // 我们直接将 R(1) 初始化为2,这样就可以免去后面再统一乘2 num.front() = 2; sum.front() = 2; // 这里循环的 i 就是 n for (int i = 1; i // 每一位都是本位乘i,再加上进位 int val = *cur1 * i + ret; // 保存进位 ret = val / 10; // 保存本位 *cur1 = val % 10; } ret = 0; // 计算 R(n) * n / (2n + 1) for (list::iterator cur1 = num.begin(); cur1 != num.end(); cur1++) { // 除数 int div = (i cout printf("3."); for(int i=0;i res=(res*x)%MOD; b--; x=(x*x)%MOD; } return res; } int main() { long long p = 0; long long ans = 0; int m, k; cin >> m >> k; //m的2^k-1次方,m的指数用二进制表示为k个1,不必再判断指数的当前位置是0还是1 ans = fast_pow(m,k); cout if(b&1!=0){ ans*=base; } ans%=c; base*=base; base%=c; b>>=1; } cout if (p & 1) res = (res * x) % MOD; x = (x * x) % MOD; p >>= 1; } return res; } int main() { ll n; cin >> n; ll res = 0; for (ll i = 1; i if(b&1) ans = ans * a % MOD; a = a * a % MOD; b >>= 1; } return ans; } int GoodNumbers(long long n) { long long ans = 1; long long p4 = n/2; long long p5 = n - p4; long long MOD = 1e9 + 7; ans = powmod(4,p4,MOD) % MOD * powmod(5,p5,MOD) % MOD; ans %= MOD; return (int)ans; } int main( ) { long long k; scanf("%lld", &k); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3