基础二刷总结
OJ基础二刷不熟求阶乘结果0的个数问题描述编写一个程序求出N的末尾含有多少个0。提示在乘积中末尾有多少个0主要看各乘数的素数因子中有多少个2和5每一个2和5的结合将给末尾贡献一个0。而乘数中因子2的个数远多于因子5的个数因此就计算各乘数中因子5的个数即可。输入说明你的数据需要从标准输入设备通常为键盘中读入多组测试数据。每组输入数据由一行组成每行由一个正整数N组成N小于等于100000在行首和行尾没有多余的空格。输出说明对每组测试数据你的程序需要向标准输出文件通常为启动该程序的文本终端依次输出一组对应的答案。所有数据前后不要输出多余的空行两组数据之间也不要输出多余的空行。每组输出数据由一行组成每行由一个整数组成在行首和行尾不要输出多余的空格。输入范例5100000输出范例124999代码#includestdio.h #includemath.h int main() { int N; while(cinN) { int count0; while(N0) { N/5; countN; } coutcountendl; } return 0; }25相乘形成一个0因子2远多于因子5count ⌊N/5⌋能被5整除的数 ⌊N/25⌋能被25整除的数提供个额外的5 ⌊N/125⌋同理 ⌊N/625⌋ ...字符串转数字如果是int用stoi如果是long long用stoll定义一对的动态数组vectorpairint,int arr; 输入元素arr.push_back({x,y});输出格式设置如果要求固定宽度对于整数例如要求输出宽度为2 1--01则--- coutsetw(2)setfill(0)arr[i];即宽度为2且0填充。反转reversereverse(开始迭代器, 结束迭代器);左闭右开区间[begin, end)比如vectorint v {1, 2, 3, 4, 5, 6, 7, 8};// 反转索引1到4即元素2,3,4,5reverse(v.begin() 1, v.begin() 5);反转数组--reverse(arr,arrn)--也可以翻转部分数组反转字符串--reverses.begin(),s.end())--也可以翻转部分字符串反转vector数组--reversev.begin(),v.end();排序sort(开始迭代器结束迭代器比较函数)默认是升序排序pair默认按first再按secondlambda表达式vectorint v {5, 2, 8, 1, 9, 3}; // 降序排序lambda方式 sort(v.begin(), v.end(), [](int a, int b) { return a b; }); // 输出9 8 5 3 2 1 for(int x : v) { cout x ; } vectorint v {5, 2, 8, 1, 9, 3}; // 降序排序lambda方式 sort(v.begin(), v.end(), [](int a, int b) { return a b; }); // 输出9 8 5 3 2 1 for(int x : v) { cout x ; } vectorpairint, int v { {3, 2}, {1, 4}, {3, 1}, {2, 3} }; // 按 second 升序排序 sort(v.begin(), v.end(), [](auto a, auto b) { return a.second b.second; }); // 输出(3,1) (3,2) (2,3) (1,4) for(auto [x, y] : v) { cout ( x , y ) ; } vectorint v {5, 2, 8, 1, 9, 3, 6, 4}; // 偶数在前奇数在后各自升序 sort(v.begin(), v.end(), [](int a, int b) { if(a % 2 ! b % 2) { return a % 2 b % 2; // 偶数(0)在前奇数(1)在后 } return a b; // 同奇偶时升序 });数字串处理串数字找出在这串数字中连续出现次数最多的那个数字若有多个数字连续出现的次数相当则找出第一次出现该次数的那个数字。代码#includebits/stdc.h using namespace std; int main() { int n; while(cinn) { vectorint arr(n); for(int i0;in;i) cinarr[i]; int maxcount1; int maxnumarr[0]; for(int i0;in;i) { int numarr[i]; int count1; for(int ji1;jn;j) { if(arr[j]num) { count; } else break; } if(countmaxcount) { maxcountcount; maxnumnum; } } coutmaxnum maxcountendl; } return 0; }约瑟夫环2约瑟夫环汽水瓶--思想每三瓶可换一瓶每两瓶可借一瓶代码#includebits/stdc.h using namespace std; //每三瓶换一瓶逢2借1又可以喝一瓶大馋猪 int main() { int n; while(cinnn!0) { int total0; while(n3) { int temp; tempn/3; totaltemp; nn%3temp;//新空瓶数 } if(n2) total; couttotalendl; } return 0; }接续40题--繁殖问题一家生化所小白鼠生长过程第一个月第二个月生长第三、四、五月可以生第六月不生第七个月死亡。第一个月born[1]1;---引进的那一对第二个月born[2]0;才两岁不生第三个月born[3]1;第一个月的那对生的第四个月born[4]1;第一个月的那对生的某个月i5新生的小白鼠数量born[i]born[i-2]3岁born[i-3]4岁born[i-4]5岁还是不太能迅速想出来。。。#include iostream using namespace std; int main() { int n; while (cin n) { long long born[60] {0}; born[1] 1;//第i个月新出生的小白鼠数量 for (int i 2; i n; i) { if (i 5) { born[i] born[i - 2] born[i - 3] born[i - 4]; // 第 i - 1 个月的小白鼠还在繁殖阶段 } else if (i 3 || i 4) { born[i] 1; // 只有第一个月的小白鼠在生 } // 第二个月新生为 0 } long long total 0; for (int i n - 5; i n; i) { if (i 1) { total born[i]; } } // 最近 6 个月出生的小白鼠都还活着 n - 5, n - 4, n - 3, n - 2, n - 1, n cout total endl; } return 0; }黑色星期五#includebits/stdc.h using namespace std; int monthdays[13]{0,31,28,31,30,31,30,31,31,30,31,30,31}; bool isLeapyear(int y) { return (y%40y%100!0)||(y%4000); } int main() { int n; cinn; int count[10]{0};//日一.....六 int start0; for(int y1900;y1900n;y)//枚举年份 { if(isLeapyear(y)) monthdays[2]29; else monthdays[2]28; for(int m1;m12;m) { count[(start13)%7];//每个月的13号是周几 startmonthdays[m]; } } coutcount[6]; for(int i0;i6;i) cout count[i]; return 0; }树--用一个bool类型的数组标记这个树是否要被砍掉问题中出现环一般求余判断一个数是否为某个数的平方bool isSquare(int x) { int tempsqrt(x); return temp*tempx; }最高频率三艘船最大值修理牛棚52 序列while((n1)*(n2)/2k)//这样是为了让while循环结束后n就是最大盒子数 n; for(int i0;iremain;i) { box[n-1-i%n];//n-1-i%n从最后一个盒子向前放放满了就继续从最后一个开始循环数组下标 }双重回文数等差数列英语3.213.22
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2447204.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!