蓝桥杯 基础练习
闰年判断
闰年
1.年份是4的倍数而不是100的倍数
2.年份是400的倍数
#include <iostream>
using namespace std;
int IsLeapYear(int y) //判断是否位闰年
{
return (y % 100 != 0 && y % 4 == 0) || (y % 400 == 0);
}
int main()
{
int year = 0;
cin >> year;
int check = IsLeapYear(year);
if (0 == check)
cout << "no";
else
cout << "yes";
return 0;
}
01字串
输出长度为5位的01字符串 32行
#include <iostream>
using namespace std;
int main()
{
int array[5] = { 0 };
for (array[0] = 0; array[0] <= 1; array[0]++)
{
for (array[1] = 0; array[1] <= 1; array[1]++)
{
for (array[2] = 0; array[2] <= 1; array[2]++)
{
for (array[3] = 0; array[3] <= 1; array[3]++)
{
for (array[4] = 0; array[4] <= 1; array[4]++)//大于1时跳出循环
{
cout << array[0] << array[1] << array[2] << array[3] << array[4] << endl;
}
}
}
}
}
return 0;
}
字母图形
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
char a[30][30];
int linenum = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
a[i][j] = 'A' + abs(linenum + j);
cout << a[i][j];
}
linenum--;
cout << endl;
}
return 0;
}
数列特征
#include <iostream>
using namespace std;
int main()
{
int n, a[10000], max,min,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 (max < a[i])
max = a[i];
if (min > a[i])
min = a[i];
sum += a[i];
}
cout << max << endl << min << endl << sum << endl;
}
查找整数
#include <iostream>
using namespace std;
int main()
{
int n, a[1000], m,b=0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> m;
for (int i = 0; i < n; i++) {
if (m == a[i]) {
b=i+1;
cout << b;
break;
}
}
if (b==0)
cout << -1;
return 0;
}
杨辉三角形
#include <iostream>
using namespace std;
int main()
{
int a[34][34];
int n;
cin>>n;
for(int i=1;i<n;i++)
{
a[i][0]=1;
}
for(int j=1;j<n;j++)
{
a[0][0]=1;
a[0][j]=0;
}
for(int i=1;i<n;i++)
{
for(int j=1;j<n;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(j>i)
{
cout<<" ";
}
else if(j<=i)
{
cout<<a[i][j];
}
if(j<i)
{
cout<<" ";
}
}
cout<<endl;
}
return 0;
}
特殊的数字
#include <iostream>
using namespace std;
int main()
{
for (int i = 100; i <= 999; i++) {
int n1 = i / 100;
int n2 = (i % 100) / 10;
int n3 = i % 10;
if (n1*n1*n1 + n2 * n2*n2 + n3 * n3*n3 == i)
cout << i<<endl;
}
}
回文数
#include <iostream>
using namespace std;
int main()
{
for (int i = 1000; i <=9999; i++) {
int n1 = i / 1000;
int n2 = (i % 1000) / 100;
int n3 = ((i % 1000) % 100) / 10;
int n4 = i % 10;
if ((n1 == n4) && (n2 == n3))
cout << i << endl;
}
}
特殊回文数1
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<sstream>
using namespace std;
int main()
{
stringstream str;
string s;
int n;
cin>>n;
for(int i = 10000;i<100000;i++)
{
str<<i;
str>>s;
if(s[0] == s[4] && s[1] == s[3] && n == (s[0]-48+s[1]-48) * 2 + s[2]-48)
{
cout<<i<<endl;
}
str.clear();
}
for(int i = 100000;i<1000000;i++)
{
str<<i;
str>>s;
if(s[0] == s[5] && s[1] == s[4] && s[2] == s[3] && n == (s[0]-48+s[1]-48+ s[2]-48) * 2)
{
cout<<i<<endl;
}
str.clear();
}
return 0;
}
特殊回文数2
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=10000;i<100000;i++)
{
int a=i%10,b=i/10%10,c=i/100%10,d=i/1000%10,e=i/10000;
if(a+b+c+d+e==n&&a==e&&b==d)
cout<<i<<endl;
}
for(int i=100000;i<1000000;i++)
{
int a=i%10,b=i/10%10,c=i/100%10,d=i/1000%10,e=i/10000%10,f=i/100000;
if(a+b+c+d+e+f==n&&a==f&&b==e&&c==d)
cout<<i<<endl;
}
return 0;
}
十进制转十六进制
#include<iostream>
#include<stack>
using namespace std;
void sixt_to10(stack<char> S,long long n,int base);
int main(){
long long n;
cin>>n;
stack<char> S;
sixt_to10(S,n,16);
return 0;
}
void sixt_to10(stack<char> S,long long n,int base){
char a[]="0123456789ABCDEF";
if(n==0){
S.push(a[0]);
}
while(n>0){
S.push(a[n%base]);
n/=base;
}
while(!S.empty()){
cout<<S.top();
S.pop();
}
}
十六进制转十进制
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
string str;
cin>>str;
int leng=str.length();
long long sum=0;
for(int i=leng-1;i>=0;i--){
if(isdigit(str[i])){
sum+=(str[i]-'0')*pow(16,leng-1-i);
}
else{
sum+=(str[i]-'A'+10)*pow(16,leng-1-i);
}
}
cout<<sum;
return 0;
}
十六进制转八进制
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n = 0, i = 0, j = 0, temp = 0, nNum = 0;
char ch;
string strHex[10];
string strBin[10];
string strOct[10];
cin>>n;
for (i = 0; i < n; ++i)
{
cin>>strHex[i];
}
for (i = 0; i < n; ++i)
{
j = 0;
while (strHex[i][j])
{
switch(strHex[i][j])
{
case '0': strBin[i] += "0000"; break;
case '1': strBin[i] += "0001"; break;
case '2': strBin[i] += "0010"; break;
case '3': strBin[i] += "0011"; break;
case '4': strBin[i] += "0100"; break;
case '5': strBin[i] += "0101"; break;
case '6': strBin[i] += "0110"; break;
case '7': strBin[i] += "0111"; break;
case '8': strBin[i] += "1000"; break;
case '9': strBin[i] += "1001"; break;
case 'A': strBin[i] += "1010"; break;
case 'B': strBin[i] += "1011"; break;
case 'C': strBin[i] += "1100"; break;
case 'D': strBin[i] += "1101"; break;
case 'E': strBin[i] += "1110"; break;
case 'F': strBin[i] += "1111"; break;
default:break;
}
++j;
}
}
for (i = 0; i < n; ++i)
{
j = strBin[i].size()-1;
while (strBin[i][j] && j>=0)
{
temp = 3;
nNum = 0;
while (temp-- && j>=0)
{
if ('1' == strBin[i][j])
{
switch(temp)
{
case 0: nNum += 4; break;
case 1: nNum += 2; break;
case 2: nNum += 1; break;
default:break;
}
}
--j;
}
strOct[i] += (nNum+'0');
}
}
for (i = 0; i < n; ++i)
{
temp = strOct[i].size()-1;
for (j = 0; j <= temp/2; ++j)
{
ch = strOct[i][j];
strOct[i][j] = strOct[i][temp-j];
strOct[i][temp-j] = ch;
}
}
for (i = 0; i < n; ++i)
{
j = 0;
while (strOct[i][j++] == '0');
for(--j; j < strOct[i].size(); ++j)
{
cout<<strOct[i][j]-'0';
}
cout<<endl;
}
return 0;
}
数列排序
#include<iostream>
using namespace std;
int main(){
int n,a[200],t;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
时间转换
#include<iostream>
using namespace std;
int main(){
int t,h=0,m=0,s=0;
cin>>t;
s=t%60;
m=t/60%60;
h=t/60/60;
cout<<h<<":"<<m<<":"<<s;
return 0;
}
字符串对比
#include <iostream>
#include<string>
#include <cctype>
using namespace std;
int main()
{
string a, b;
cin >> a >> b;
if (a.length() == b.length()) {
if (a== b) {
cout << 2;
}
else if (a != b) {
int c = 0;
for (int i = 0; i < a.length(); i++) {
if (tolower(a[i]) == tolower(b[i])) {
c++;
}
}
if (c == a.length())
cout << 3;
else if(c!=a.length())
cout << 4;
}
}
else
cout<<1;
}
分解质因数
#include <iostream>
#include<cmath>
using namespace std;
int zs[10001];
int k;
string qys(int m) {
if (m == 1) return "";
for (int i = 0; i < k; i++) {
if (m%zs[i] == 0) {
cout << zs[i];
if (m / zs[i] != 1) cout << "*";
return qys(m / zs[i]);
}
}
}
void zhishu(int a, int b) {
int i, j;
k = 0;
for (i = 2; i <= b; i++) {
int s = sqrt(i);
for (j = 2; j <= s; j++)
if (i%j == 0) break;
if (j > s) {
zs[k] = i;
k++;
}
}
}
int main()
{
int a, b;
cin >> a >> b;
zhishu(a, b);
for (int i = a; i <= b; i++) {
cout << i << "=";
qys(i);
cout << endl;
}
return 0;
}