归志宁无五亩园,读书本意在元元。这篇文章主要讲述算法开胃小菜相关的知识,希望能为你提供帮助。
开胃小菜
简单查找
害死人不偿命的3n+1
#include<
stdio.h>
#include<
iostream>
using namespace std;
int i=0;
int Callatz(int x)
if(x==1)else if(x%2==0)
Callatz(x/2);
i++;
else
Callatz((3*x+1)/2);
i++;
return i;
int main()
int x;
cin >
>
x;
cout <
<
Callatz(x);
return 0;
挖掘机技术哪家强?
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
#include <
stdio.h>
#include<
iostream>
using namespace std;
//初始化
int school[100000]=0;
int main()
int n,id,score;
//输入参赛人数
cin >
>
n;
//相同的id学校成绩相加
for(int i=1;
i<
=n;
i++)
cin >
>
id >
>
score;
school[id]+=score;
//遍历出最大成绩
//注意max 的初始化不要设置为0
int k=-1,max=-1;
for(int i=1;
i<
=n;
i++)
if(school[i]>
max)
max=school[i];
k=i;
cout <
<
k<
<
" "<
<
max;
return 0;
图形输出输入在一行中给出正方形边长N(3< =N< =20)和组成正方形边的某种字符C,间隔一个空格。
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
10 a
aaaaaaaaaa
aa
aa
aa
aaaaaaaaaa
#include <
stdio.h>
#include<
iostream>
using namespace std;
int main()
//定义参数 行列
int row,col;
char c;
cin >
>
col>
>
c;
//判断行列大小
if(col%2==0)
row=col/2;
else
row=col/2+1;
//第一行
for(int i=0;
i<
col;
i++)
cout<
<
c;
cout<
<
endl;
//第二行到倒数第二行
for(int i=2;
i<
row;
i++)
cout<
<
c;
for(int j=0;
j<
col-2;
j++)
cout<
<
" ";
cout<
<
c<
<
endl;
//最后一行
for(int i=0;
i<
col;
i++)
cout<
<
c;
cout<
<
endl;
日期处理有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
每组数据输出一行,即日期差值
20130101 20130105
5
#include<
cstdio>
int month[13][2] =
// 平年和闰年的每个月的天数
0,0,//仅用于填充month[0][0] 无实际意义
31,31,//1月
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31//12月
;
bool isLeap(int year)//判断是否是闰年
return(year % 4 == 0 &
&
year % 100 != 0) || (year % 400 == 0);
int main()
int time1, y1, m1, d1;
int time2, y2, m2, d2;
while(scanf("%d%d", &
time1, &
time2) != EOF)
if(time1 >
time2)
int temp = time1;
time1 = time2;
time2 = temp;
y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100;
int ans = 1;
//记录结果//第一个日期没有达到第二个日期时进行循环
//即 !((y1 == y2) &
&
(m1 == m2) &
&
(d1 = d2))
while(y1 <
y2 || m1 <
m2 || d1 <
d2)d1++;
//天数加 1if(d1 == month[m1][isLeap(y1)] + 1)//满当月天数
m1 ++;
//日期变为下个月的 1 号
d1 = 1;
if(m1 == 13)//月份满 12 个月
y1++;
m1 = 1;
ans++;
//累计 printf("%d\\n", ans);
//输出结果 return 0;
进制转换输入两个非负10进制整数A和B(< =230-1),输出A+B的D (1 < D < = 10)进制数。
输入在一行中依次给出3个整数A、B和D。
输出A+B的D进制数。
123 456 8
1103
#include<
cstdio>
int main()
int a, b, d;
scanf("%d%d%d", &
a, &
b, &
d);
int sum = a + b;
int ans[31], num = 0;
// ans 存放 D 进制的每一位do// 进制转换
ans[num++] = sum % d;
sum /= d;
while(sum != 0);
for(int i = num - 1;
i >
= 0;
i--)//从高位到低位进行输出
printf("%d", ans[i]);
return 0;
字符串处理读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
一行字符串,长度不超过255。
如果是回文串,输出“YES”,否则输出“NO”。
12321
YES
#include<
cstdio>
#include<
cstring>
const int maxn=256;
bool Judge(char character[])int lenth=strlen(character);
for(int i=0;
i<
lenth/2;
i++)//数组折中,i对应max-i-1
if(character[i]!=character[lenth-1-i])
return false;
return true;
int main()char character[maxn];
while(gets(character))bool flag=Judge(character);
if(flag==true)printf("%s","YES\\n");
return 0;
elseprintf("%s","NO\\n");
return 0;
return 0;
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
每个测试用例的输出占一行,输出倒序后的句子。
Hello World Here I Come
【算法开胃小菜】Come I Here World Hello
#include<
cstdio>
int main()
int num = 0;
//单词的个数
char ans[80][80];
while(scanf("%s", ans[num]) != EOF)//一直输入直到文件末尾
num++;
//单词的个数加 1 for(int i = num - 1;
i >
= 0;
i--)//倒着输出单词
printf("%s", ans[i]);
if(i >
0) printf(" ");
return 0;
推荐阅读
- Samba文件共享服务
- [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序
- kettle庖丁解牛第5篇之文本文件输入
- 基于java eclipse+jsp+mysql+servlet+Spring的学生信息管理系统基础版
- nginx+Tomcat 负载均衡
- 机器学习算法之KMeans聚类
- Linux 下通过 pip3 安装 Ansible
- #yyds干货盘点# 解决剑指offer(重建二叉树)
- 目标检测算法之YOLOv3及YOLOV3-Tiny