基础训练汇总
Posted 揭航
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础训练汇总相关的知识,希望对你有一定的参考价值。
基础训练汇总
基础
01_闰年判断
B_约数C_连在一起的长度C_连在一起的长度 /*
问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
样例输入
2013
样例输出
no
样例输入
2016
样例输出
yes
数据规模与约定
1990 <= y <= 2050。
*/
#include <cstdio>
#include <iostream>
using namespace std;
void f(int year) {
int flag = 0;
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
cout << "yes";
else
cout << "no";
}
int main() {
int year;
cin >> year;
f(year);
return 0;
}
04_ 数列特征_最值_求和
/*
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
*/
#include <iostream>
using namespace std;
int main() {
// 几个数?
int n;
int a[10000];
// 最值
int max = 0, min = 0;
// 求和
int sum = 0;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
// 别忘记一个数....
max = a[0];
min = a[0];
for (int i = 0; i < n; i++) {
// 比一次就行
if (a[i] >= max) max = a[i];
if (a[i] <= min) min = a[i];
sum = sum + a[i];
}
cout << max << '\\n' << min << '\\n' << sum << endl;
return 0;
}
07_水仙花数
/*
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
*/
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int gewei, shiwei, baiwei;
for (int i = 100; i < 1000; i++) {
baiwei = i / 100 % 10;
shiwei = i / 10 % 10;
gewei = i % 10;
if (pow(baiwei, 3) + pow(shiwei, 3) + pow(gewei, 3) == i)
cout << i << endl;
}
return 0;
}
08_回文数
/*
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
*/
#include <math.h>
#include <iostream>
using namespace std;
int main() {
int qianwei, baiwei, shiwei, gewei;
for (int i = 1000; i < 10000; i++) {
qianwei = i / 1000 % 10;
baiwei = i / 100 % 10;
shiwei = i / 10 % 10;
gewei = i % 10;
if (qianwei == gewei && baiwei == shiwei) cout << i << endl;
}
return 0;
}
09_特殊回文数
/*
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n
。 输入格式 输入一行,包含一个正整数n。 输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
*/
#include <iostream>
using namespace std;
int main() {
// 每位的数之和
long long n;
// 开够6位数的数组
long long a[6];
cin >> n;
// 5位数的
for (long long i = 10000; i < 100000; i++) {
a[0] = i / 10000 % 10;
a[1] = i / 1000 % 10;
a[2] = i / 100 % 10;
a[3] = i / 10 % 10;
a[4] = i % 10;
if (a[0] == a[4] && a[1] == a[3]) {
if ((a[0] + a[1] + a[2] + a[3] + a[4]) == n
cout << i << endl;
}
// 6位数的
for (long long i = 100000; i < 1000000; i++) {
a[0] = i / 100000 % 10;
a[1] = i / 10000 % 10;
a[2] = i / 1000 % 10;
a[3] = i / 100 % 10;
a[4] = i / 10 % 10;
a[5] = i % 10;
if (a[0] == a[5] && a[1] == a[4] && a[2] == a[3]) {
if ((a[0] + a[1] + a[2] + a[3] + a[4] + a[5]) == n)
cout << i << endl;
}
}
return 0;
}
}
13_数列排序
/*
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
*/
#include <iostream>
using namespace std;
int main() {
// 数组大小
int n;
int a[200];
int temp;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n - 1; i++) {
// 后面的循环条件是减去i
for (int j = i + 1; j < n; j++) {
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}
查找与排序
05_查找整数
/*
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
*/
#include <iostream>
using namespace std;
int main() {
// n个整数
int n;
int a[1000];
// 用于查找的数
int lookNum;
// 返回的下标
int index = -1;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
cin >> lookNum;
for (int i = 0; i < n; i++) {
if (lookNum == a[i]) {
index = i + 1;
break;
}
}
cout << index;
return 0;
}
数据转换
02_十进制化二进制01字串
/*
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
*/
#include <iostream>
using namespace std;
// 转8位二进制
void dec_to_bin(int num) {
int a[8] = {0};
int temp = num;
// 下标索引
int index = 7;
while (temp >= 1) {
// 依次取每一位
a[index] = temp % 2;
index--;
// 为了除掉后面的位
temp = temp / 2;
}
for (int j = 0; j < 8; j++) cout << a[j];
cout << endl;
}
void dec_to_bin_2(int num) {
int a[8] = {};
for (int i = 0; i < 8; i++) {
a[i] = num & 1;
num = num >> 1;
}
for (int i = 7; i >= 0; i--) cout << a[i];
}
void f() {
for (int i = 0; i < 32; i++) {
int a[5] = {0};
int temp = i;
// 下标索引
int index = 4;
while (temp >= 1) {
// 依次取每一位
a[index] = temp % 2;
index--;
// 为了除掉后面的位
temp = temp / 2;
}
for (int j = 0; j < 5; j++) cout << a[j];
cout << endl;
}
}
int main() {
// f();
dec_to_bin_2(1);
return 0;
}
10_十进制转十六进制
/*
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
*/
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
char to_hex(int num) {
switch (num) {
case 0:
return '0';
case 1:
return '1';
case 2:
return '2';
case 3:
return '3';
case 4:
return '4';
case 5:
return '5';
case 6:
return '6';
case 7:
return '7';
case 8:
return '8';
case 9:
return '9';
case 10:
return 'A';
case 11:
return 'B';
case 12:
return 'C';
case 13:
return 'D';
case 14:
return 'E';
case 15:
return 'F';
}
}
int main() {
int num;
cin >> num;
string ans;
while (num > 0) {
ans += to_hex(num % 16);
num /= 16;
}
// 空
if (ans.empty())
cout << 0 << endl;
else {
reverse(ans.begin(), ans.end());
cout << ans << endl;
}
return 0;
}
11_十六进制转十进制
/*
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
*/
#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
using namespace std;
int to_dec(char c) {
switch (c) {
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
}
}
int main() {
string str;
// FFFF FFFF
//不然数据溢出了
long long sum = 0;
cin >> str;
// 利用反转了
// reverse(str.begin(), str.end());
// for (int i = 0; i < str.length(); i++)
// {
// sum += to_dec(str[i]) * pow(16, i);
// }
// 不用反转
for (int i = str.length() - 1; i >= 0; i--) {
sum += to_dec(str[i]) * pow(16, str.length() - i - 1);
}
cout << sum;
return 0;
}
12_十六进制转八进制
/*
问题描述
给以上是关于基础训练汇总的主要内容,如果未能解决你的问题,请参考以下文章
使用汇总操作训练 TensorFlow 模型比不使用汇总操作要慢得多
历史最全最新中文自然语言处理预训练模型汇总分享-内含免费下载地