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

为什么选择码蹄集作为刷题软件?
码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。同时,也是我作为百度松果计划成员的主要OJ题周测平台,另有清华,中科院,北京工业等各知名院校和院所的强力支持,是故选择了它
(1)题目描述
输出N阶奇数阶魔方阵。所谓N阶魔方阵,就是把1 ~n*n个连续的正整数填到一个N行N列的方阵中,使得每一列、每一行以及两个对角线的元素和都相等。
格式
输入格式: 输入为整型N
.
输出格式: 输出N阶魔方阵
样例1
输入格式: 3
.
输出格式:
8 1 6
3 5 7
4 9 2
(2)参考代码
#include
using namespace std;
int main( )
{
int row,col,n,a[100][100] = {0};
scanf("%d",&n);
row=0;
col=(n-1)/2;
a[row][col] = 1;
for(int i=2;i<=n*n;i++){
if(a[(row-1+n)%n][(col+1)%n]==0){
row = (row-1+n)%n;
col = (col+1)%n;
}else{
row = (row+1)%n;
}
a[row][col]=i;
}
for(row=0;row<n;row++){
for(col=0;col<n;col++) cout<<a[row][col]<<" ";
cout<<endl;
}
return 0;
}
(1)题目描述
输入一个M ×N的整数数组,把原来的负数全部替换成对应的正数,正数替换成负数,比如-5替换成5,再转置输出。不考虑非法输入或者溢出等特殊情况。
格式
输入格式: 第一行输入M和N(均小于100),第二行输入数组元素,空格分隔。
.
输出格式:输出矩阵
样例1
输入格式:
3 2
8 9
-5 4
-1 -7
.
输出格式:
-8 5 1
-9 -4 7
(2)参考代码
#include
using namespace std;
int main( )
{
int m,n,a[100][100];
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) printf("%d ",-a[j][i]);
printf("\n");
}
return 0;
}
(1)题目描述
输入正整数N,把一个大小为NxN的方阵,逆时针旋转180度后输出。
格式
输入格式: 第一行输入数组长度N,后N行按方阵输入数组元素,整型,空格分隔。
.
输出格式: 按方阵输出,整型,空格分隔。
样例1
输入格式:
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
.
输出格式:
16 15 14 13
12 11 10 9
8 7 6 5
4 3 2 1
(2)参考代码
#include
using namespace std;
int main( )
{
int n,a[100][100];
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=n-1;i>=0;i--){
for(int j=n-1;j>=0;j--) cout<<a[i][j]<<" ";
printf("\n");
}
return 0;
}
(1)题目描述
输入一个字符串,输出字符串。请在循环中%c一个字符一个字符的输入输出。
格式
输入格式: 分2行输入。第一行输入字符串长度n,第二行输入字符串
.
输出格式: 输出字符型
样例1
输入格式:
5
abcde
.
输出格式: abcde
(2)参考代码
#include
using namespace std;
int main( )
{
int n;
char ch[10005]="";
scanf("%d\n",&n);
for(int i=0;i<n;i++) scanf("%c",&ch[i]);
for(int i=0;i<n;i++) printf("%c",ch[i]);
return 0;
}
(1)题目描述
输入一个字符串,输出字符串。请用‰%s输入输出整个字符串。本题不考虑空格。
格式
输入格式: 分2行输入。第一行输入字符串长度n,第二行输入字符串。
.
输出格式: 输出字符型
样例1
输入格式:
5
abcde
.
输出格式: abcde
(2)参考代码
#include
using namespace std;
int main( )
{
int n;
scanf("%d\n",&n);
string s;
getline(cin,s);
cout<<s<<endl;
return 0;
}
(1)题目描述
输入一个字符串,输出字符串。本题请调用fgets和fputs实现字符串输入输出。
格式
输入格式: 分2行输入。第一行输入字符串长度n (n<80),第二行输入字符串
.
输出格式: 输出字符型
样例1
输入格式:
5
abcde
.
输出格式: abcde
(2)参考代码
#include
using namespace std;
int main( )
{
int n;
char s1[1005];
scanf("%d\n",&n);
fgets(s1,n+1,stdin);
fputs(s1,stdout);
return 0;
}
(1)题目描述
输入一个字符串,输出字符串。请用scanf(“%[^\n]%*c”,str);输入
格式
输入格式: 输入字符串
.
输出格式: 输出字符串
样例1
输入格式: 12345
.
输出格式: 12345
(2)参考代码
#include
using namespace std;
int main( )
{
char s[100];
scanf("%[^\n]%*c",s);
printf("%s",s);
return 0;
}
(1)题目描述
定义一个字符串数组char A[3][80],按字符串方式来进行输入和输出(串中不含空格)。
格式
输入格式: 分3行输入,每行输入一个字符串
.
输出格式: 分3行输出,每行输出一个字符串
样例1
输入格式:
aaa
bbbb
cccccc
.
输出格式:
aaa
bbbb
cccccc
(2)参考代码
#include
using namespace std;
int main( )
{
string s;
for(int i=0;i<3;i++){
cin>>s;
cout<<s<<endl;
}
return 0;
}
(1)题目描述
定义一个字符数组,长度为80,输入一个字符串,用字符串长度函数计算有效的长度并输出,然后用sizeof计算数组长度并输出,看看有什么不同。
格式
输入格式: 输入字符串
.
输出格式: 输出为整型,空格分隔。
样例1
输入格式: 12345
.
输出格式: 5 80
(2)参考代码
#include
using namespace std;
int main( )
{
char a[80];
cin.getline(a, 80);
printf("%d %d",strlen(a),sizeof(a));
return 0;
}
(1)题目描述
编写程序,在不使用标准字符串函数的情况下求一个字符串S1的长度。
格式
输入格式: 输入字符串(长度小于80)
.
输出格式:输出为整型
样例1
输入格式: 123456
.
输出格式: 6
(2)参考代码
#include
using namespace std;
int main( )
{
char a[80];
cin.getline(a, 80);
int n=0;
while(a[n] !='\0') n++;
cout<<n;
return 0;
}
(1)题目描述
用字符串复制函数把b字符串复制到a字符串里面,输出结果。
格式
输入格式: 输入字符串b
.
输出格式: 输出字符串a
样例1
输入格式: 12345
.
输出格式: 12345
(2)参考代码
#include
using namespace std;
int main( )
{
string s;
cin>>s;
cout<<s;
return 0;
}
(1)题目描述
编写程序,在不使用标准字符串函数的情况下将一个字符串S1的内容复制给另一个字符串S2。
格式
输入格式: 输入字符串S1(长度小于80)
.
输出格式: 输出字符串S2
样例1
输入格式: 123456
.
输出格式: 123456
(2)参考代码
#include
using namespace std;
int main( )
{
char s1[1005],s2[1005];
cin.getline(s1, 10005);
int len = strlen(s1);
for(int i=0;i<len;i++){
s2[i] = s1[i];
}
cout<<s2<<endl;
return 0;
}
(1)题目描述
用字符串连接函数把两个字符串拼接在一起,输出结果。
格式
输入格式: 2个字符串分2行输入。
.
输出格式: 输出字符串
样例1
输入格式:
12345
abcde
.
输出格式: 12345abcde
(2)参考代码
#include
using namespace std;
int main( )
{
char s1[1005],s2[1005];
scanf("%s",s1);
scanf("%s",s2);
strcat(s1, s2);
cout<<s1<<endl;
return 0;
}
(1)题目描述
编写程序,在不使用标准字符串函数的情况下将两个字符串S1和S2连接起来,结果保存在S1字符串中。
格式
输入格式: 分两行输入字符串S1和S2(长度小于80)
.
输出格式: 输出字符串S1
样例1
输入格式:
123456
abc
.
输出格式: 123456abc
(2)参考代码
#include
using namespace std;
int main( )
{
char a[80],b[80];
cin.getline(a, 80);
cin.getline(b, 80);
int lena = strlen(a);
int lenb = strlen(b);
for(int i=lena,j=0;i<lena+lenb;i++,j++){
a[i] = b[j];
}
a[lena+lenb]='\0';
printf("%s",a);
return 0;
}
(1)题目描述
输入2个字符串,用字符串比较函数比较他们并输出结果。
格式
输入格式: 字符串分2行输入
.
输出格式: 输出整型
样例1
输入格式:
12345
2
.
输出格式: -1
(2)参考代码
#include
using namespace std;
int main( )
{
char s1[80],s2[80];
scanf("%s",s1);
scanf("%s",s2);
printf("%d",strcmp(s1,s2));
return 0;
}
(1)题目描述 格式 输入格式: 分两行输入字符串S1和S2(长度小于80) 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分两行输入字符串s1,s2 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分两行输入字符串S1和S2 样例1 输入格式: 备注: 字符串中可能含有空格 (2)参考代码 (1)题目描述 格式 输入格式: 无 样例1 输入格式: 无 (2)参考代码 (1)题目描述 格式 输入格式: 分两行输入字符串s1和正整数N 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 输入字符型 样例1 输入格式: i hate u (2)参考代码 (1)题目描述 输入字符串s1(不含空格),将字符串反向存放并输出。 格式 输入格式: 输入字符串(长度小于80) 样例1 输入格式: water (2)参考代码 (1)题目描述 格式 输入格式: 分2行输入。第一行输入字符串,第二行输入非负整数n,n小于字符串长度 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分2行输入。第一行输入字符串,第二行输入输入非负整数n, n小于字符串长度 样例1 输入格式: 备注: 字符串可能包含空格 (2)参考代码 (1)题目描述 格式 输入格式: 分两行输入字符串s1,s2(长度都小于80) 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分2行输入。第一行输入字符串,第二行输入整数n 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分2行输入。第一行输入字符串,第二行输入整数n 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串 样例1 输入格式: abcd (2)参考代码 (1)题目描述 格式 输入格式: 分行输入字符串,最后一行输入指定位置。 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串(长度小于80) 样例1 输入格式: Wendy love C++! C++ is great! (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串,其总长度小于80。输入如样例所示,乐谱符号后面空一格输入minor或者major。 样例1 输入格式: Ab minor (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串,长度为n (n<100000) 样例1 输入格式: 1 2 3 4 5 6 (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串 样例1 输入格式: 123456 (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串(长度小于80) 样例1 输入格式: Wendy love C++! C++ is great! (2)参考代码 (1)题目描述 格式 输入格式: 输入2个字符串,长度为n (n<100) 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 分两行输入,第一行输入要搜索的字符,第二行输入字符串(长度小于80) 样例1 输入格式: (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串(不含空格) 样例1 输入格式: C++! (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串(长度小于80) 样例1 输入格式: waterbottle (2)参考代码 (1)题目描述 格式 输入格式: 一个长度为100000以内的字符串 样例1 输入格式: AbCdEf (2)参考代码 (1)题目描述 格式 输入格式: 输入1个字符串,长度为n (n<100000) 样例1 输入格式: abcdefGHi (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串 样例1 输入格式: Good Morning! Miss Wendy Potter, have you seen your mom? She love u. (2)参考代码 (1)题目描述 格式 输入格式: 一个字符串,长度n (n<100000) 样例1 输入格式: aeiou (2)参考代码 (1)题目描述 格式 输入格式: 输入1个字符串,长度为n (n<100000) 样例1 输入格式: aword bword cword aword (2)参考代码 (1)题目描述 格式 输入格式: 输入1个字符串,长度为n (n<100) 样例1 输入格式: worda wordb wordc worda (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串 样例1 输入格式: i love u 备注: 本题中,所有符号均为英文符号。非空格、非逗号、非小数点的符号,均视为单词的正确组成部分。 (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串(长度小于80) 样例1 输入格式: Wendy is a great girl (2)参考代码 (1)题目描述 格式 输入格式: 输入字符串s 样例1 输入格式: lovenwpulovenpu (2)参考代码 (1)题目描述 格式 输入格式: 输入为整型 样例1 输入格式: -123 样例2 输入格式: +34 备注: 数值较大,需要定义为long类型。不考虑输入为0的特殊情况。 (2)参考代码 (1)题目描述 格式 输入格式:输入为整型 样例1 输入格式: 35 (2)参考代码 (1)题目描述 例如,若为-2则输出11111110 格式 输入格式:输入为整型 样例1 输入格式: 35 (2)参考代码 典型范例: 近期会逐步将码题集题库中的新手村600题刷完,预计每天会更新50题,之后会逐步跟进黄金,钻石,星耀,王者的题,尽请期待!!! 另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~ 愿你的结局,配得上你一路的颠沛流离。
编写程序,在不使用标准字符串函数的情况下比较两个字符串S1和S2,如果S1>S2,输出1;如果S1=S2,输出0;如果S1
.
输出格式: 输出为整型
123456
abc
.
输出格式: -1#include
17. MT1467 字符串比较
利用指针完成字符串比较函数int mystrcmp(char *s1,char *s2),比较字符串s1, s2(字符串长度小于10000),如果s1>s2输出1,小于则输出-1,相等输出0。
.
输出格式: 输出整数
I love C!
C is great!
.
输出格式: 1#include
18. MT1468 字符串前缀
两个字符串可能有相同的前缀,输出这个前缀。
.
输出格式: 输出字符串前缀
aa123456
aabc
.
输出格式: aa
#include
19. MT1469 间隔输出串
将字符串l love c++赋给一个字符数组,然后从第一个字母开始间隔地输出该串。
.
输出格式: 输出字符串
.
输出格式: Ilv +#include
20. MT1470 字符串切割
输入字符串s1(长度小于80,由大小写字母构成,不含空格),和正整数N(小于字符串长度),把字符串切割成每N个字符一份,并输出(最后一份可以小于N)。
.
输出格式: 输出切割后的字符串,每一份一行
adfasdfsadsgsg
3
.
输出格式:
adf
asd
fsa
dsg
sg#include
21. MT1471 反转
输入一个字符串,输出字符串反转后的内容
.
输出格式: 输出字符型
.
输出格式: u etah i#include
22. MT1472 字符串反向
.
输出格式: 输出字符,空格分隔
.
输出格式: retaw#include
23. MT1473 左移n位
输入一个字符串(长度不超过80),输出字符串左移n位后的内容。移出去的内容去掉。
.
输出格式: 输出字符串
12345
3
.
输出格式: 45#include
24. MT1474 右移n位
输入一个字符串(长度不超过80),输出字符串右移n位后的内容。移出去的内容去掉。
.
输出格式: 输出字符串
12345
3
.
输出格式: 12
#include
25. MT1475 回旋字符串
输入字符串s1,s2(均不含空格),判断s1是否为s2的回旋字符串,输出YES或者NO。
.
输出格式: 输出整数
waterbottle
erbottlewat
.
输出格式: YES#include
26. MT1476 右旋n位
输入一个字符串,输出字符串右旋n位后的内容
.
输出格式: 输出字符串
12345
3
.
输出格式: 34512#include
27. MT1477 左旋n位
输入一个字符串,输出字符串左旋n位后的内容
.
输出格式: 输出字符串
12345
3
.
输出格式: 45123#include
28. MT1478 插入A
从键盘上输入一个字符串(长度小于10000,以回车作为结束,其余地方不出现回车),按后按照下面要求输出一个新字符串,新的字符串是在原来字符串中,每两个字符之间插入一个A,输出新产生的字符串。
.
输出格式: 输出字符串
.
输出格式: aAbAcAd#include
29. MT1479 字符串插入
将一个字符串插入到另一个字符串指定位置处。
.
输出格式: 输出字符串
aaaaa
bbb
2
.
输出格式: aabbbaaa#include
30. MT1480 替换空格
输入字符串s1,找出字符串的所有空格,把它替换成**输出。
.
输出格式: 输出字符串
.
输出格式: WendyloveC++!**C++wasgreat!#include
31. MT1481 小码哥的乐谱
小码哥是个小马虎老是写错乐谱,你不得不帮他替换一下。法则是下面这些等式中,左右两边的字符互换A#=Bb,C#=Db,D#=Eb,F#=Gb,G#=Ab。
.
输出格式: 输出字符串
.
输出格式: G# minor#include
32. MT1482 删除空格
编写程序,去掉一个字符串全部空格。
.
输出格式: 输出字符串
.
输出格式: 123456#include
33. MT1483 首尾空格
编写程序,去掉一个字符串(长度小于80)首尾空格。
.
输出格式: 输出字符串
.
输出格式:123456#include
34. MT1484 删除空格标点
输入字符串s1,找出字符串的所有空格和标点符号删除后输出。(假定标点符号只包含英文感叹号,逗号和句号)
.
输出格式: 输出字符串
.
输出格式: WendyloveC++C++isgreat#include
35. MT1485 删除字符
输入2个字符串A和B,删除第一个字符串中包含的第二个字符串中的字符。如果不包含则原样输出第一个字符串。
.
输出格式: 转换后的字符串
123456
123
.
输出格式: 456#include
36. MT1186 字符搜索
编写程序,在不使用标准字符串函数的情况下搜索一个字符在字符串中的位置。如果没有搜索到位置为-1。从0开始计数。
.
输出格式: 输出为整型
3
123456
.
输出格式: 2#include
37. MT1487 检查子串
输入字符串(长度小于80,不含空格)S,如果在字符串S中找到字母则输出YES,没有输出NO。
.
输出格式: 输出YES或者NO
.
输出格式: YES#include
38. MT1488 最大和最小字符
输入字符串s1(不含空格),查找字符串中最大和最小(ASCII值,区分大小写)字符并输出。
.
输出格式: 输出最大和最小字符,空格分隔
.
输出格式: w a#include
39. MT1489 字符串的大小写转换
给定一个字符串,将所有的大写字母转换成小写,并把所有小写的转换为大写。
.
输出格式: 转换后的字符串
.
输出格式: aBcDeF#include
40. MT1490 修改字符串
输入1个字符串,如果其中小写字符多于大写字符,则将其全部转换为小写字符,如果大写字符多于小写字符,则全部转换为大写字符。
.
输出格式: 转换后的字符串
.
输出格式: abcdefghi#include
41. MT1491 标点符号
假定一个字符串(长度小于80)存在的标点符号有感叹号、逗号、句号、问号这几种英文符号,分别计算这些符号有多少个并输出结果。
.
输出格式: 输出整型,空格分隔
.
输出格式: 1 1 1 1#include
42. MT1492 元音计数
输入1个字符串(不含空格),统计其中出现的元音字母的个数。
.
输出格式: 其中元音字母的个数
.
输出格式: 5#include
43. MT1493 出现最多的首字母
输入1个字符串,是空格分隔的一个个单词。统计其中出现次数最多的首字母。
.
输出格式: 出现次数最多的首字母(如果有多个,输出ASCII码最小的字母)注意输出小写字母!
.
输出格式: a#include
44. MT1494 出现最多的单词
输入1个字符串(不含数字或者其他字符,只含大小写字母和空格,单词不区分大小写),该字符串是空格分隔的一个个单词,这些单词长度相等都包含5个字符。统计其中出现次数最多的单词。
.
输出格式: 出现次数最多的单词(若有多个单词满足条件,输出原输入顺序最靠前的满足条件的单词,单词输出小写即可)
.
输出格式: worda#include
45. MT1495 单词
编写程序,输入一个字符串,统计其中有多少个单词(单词用空格、逗号、小数点分隔)。
.
输出格式: 输出为整型
.
输出格式: 3
#include
46. MT1496 重复字符
输入字符串s1(只包含字母和空格),查找字符串中的重复字符(指26个英语字母,区分大小写),从小到大(ASCII值)排序他们并输出。
.
输出格式: 输出字符,空格分隔
.
输出格式: a e g i r#include
47. MT1497 字符串中唯一字符
给定一个字符串(均为小写字母组成,不含空格),找到它的第一个不重复的字符,并返回它的索引(从O开始)。如果不存在,则返回 -1。
.
输出格式: 输出索引,不存在输出-1
.
输出格式: 153#include
48. MT1498 整数转换字符串
将一个整型数据(有正负号)转换成字符串。
.
输出格式: 输出字符串
.
输出格式: -123
.
输出格式: +34
#include
49. MT1499 无符号整数转换
将一个无符号整型数据转换成字符串形式的二进制。
.
输出格式: 输出为字符串
.
输出格式: 100011#include
50. MT1500 有符号数转换
将一个有符号整型数据转换成字符串形式的八位二进制
(负数使用其补码)
.
输出格式: 输出为字符串
.
输出格式: 00100011#include
小结
结语
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?